信号linux 安全(信号linux)
Linux中,shell腳本如何使用信號(hào)機(jī)制去控制線程的開(kāi)啟關(guān)閉?
trap是Linux的內(nèi)建命令,用于捕捉信號(hào),trap命令可以指定收到某種信號(hào)時(shí)所執(zhí)行的命令。trap命令的格式如下:trap command sig1 sig2 ... sigN,當(dāng)接收到sinN中任意一個(gè)信號(hào)時(shí),執(zhí)行command命令,command命令完成后繼續(xù)接收到信號(hào)前的操作,直到腳本結(jié)束。 利用trap命令捕捉INT信號(hào)(即與Ctrl+c綁定的中斷信號(hào))。trap還可以忽略某些信號(hào),將command用空字符串代替即可,如trap "" TERM INT,忽略kill %n和Ctrl+c發(fā)送的信號(hào)(kill發(fā)送的是TERM信號(hào))。Linux更強(qiáng)勁的殺死進(jìn)程的命令:kill -9 進(jìn)程號(hào)(或kill -9 %n作業(yè)號(hào))等價(jià)與kill -KILL 進(jìn)程號(hào)。
舉個(gè)例子
:
最近小A需要生產(chǎn)2015年全年的KPI數(shù)據(jù)報(bào)表,現(xiàn)在小A已經(jīng)將生產(chǎn)腳本寫(xiě)好了,生產(chǎn)腳本一次只能生產(chǎn)指定一天的KPI數(shù)據(jù),假設(shè)跑一次生產(chǎn)腳本需要5分鐘,那么:
如果是循環(huán)順序執(zhí)行,那么需要時(shí)間:5 * 365 = 1825 分鐘,約等于 6 天
如果是一次性放到linux后臺(tái)并發(fā)執(zhí)行,365個(gè)后臺(tái)任務(wù),系統(tǒng)可承受不住哦!
既然不能一次性把365個(gè)任務(wù)放到linux后臺(tái)執(zhí)行,那么,能不能實(shí)現(xiàn)自動(dòng)地每次將N個(gè)任務(wù)放到后臺(tái)并發(fā)執(zhí)行呢?當(dāng)然是可以的啦。
#! /bin/bash
source /etc/profile;
# -----------------------------
tempfifo=$$.fifo # $$表示當(dāng)前執(zhí)行文件的PID
begin_date=$1 # 開(kāi)始時(shí)間
end_date=$2 # 結(jié)束時(shí)間
if
then
if
then
echo "Error! $begin_date is greater than $end_date"
exit 1;
fi
else
echo "Error! Not enough params."
echo "Sample: sh loop_kpi 2015-12-01 2015-12-07"
exit 2;
fi
# -----------------------------
trap "exec 1000>&-;exec 1000
mkfifo $tempfifo
exec 1000$tempfifo
rm -rf $tempfifo
for ((i=1; i
do
echo >&1000
done
while
do
read -u1000
{
echo $begin_date
hive -f kpi_report.sql --hivevar date=$begin_date
echo >&1000
} &
begin_date=`date -d "+1 day $begin_date" +"%Y-%m-%d"`
done
wait
echo "done!!!!!!!!!!"
第6~22行:比如:sh loop_kpi_report.sh 2015-01-01 2015-12-01:
$1表示腳本入?yún)⒌牡谝粋€(gè)參數(shù),等于2015-01-01
$2表示腳本入?yún)⒌牡诙€(gè)參數(shù),等于2015-12-01
$#表示腳本入?yún)⒌膫€(gè)數(shù),等于2
第13行用于比較傳入的兩個(gè)日期的大小,>是轉(zhuǎn)義
第26行:表示在腳本運(yùn)行過(guò)程中,如果接收到Ctrl+C中斷命令,則關(guān)閉文件描述符1000的讀寫(xiě),并正常退出
exec 1000>&-;表示關(guān)閉文件描述符1000的寫(xiě)
exec 1000
trap是捕獲中斷命令
第27~29行:
第27行,創(chuàng)建一個(gè)管道文件
第28行,將文件描述符1000與FIFO進(jìn)行綁定,寫(xiě)的綁定,則標(biāo)識(shí)對(duì)文件描述符1000的所有操作等同于對(duì)管道文件$tempfifo的操作
第29行,可能會(huì)有這樣的疑問(wèn):為什么不直接使用管道文件呢?事實(shí)上這并非多此一舉,管道的一個(gè)重要特性,就是讀寫(xiě)必須同時(shí)存在,缺失某一個(gè)操作,另一個(gè)操作就是滯留,而第28行的綁定文件描述符(讀、寫(xiě)綁定)正好解決了這個(gè)問(wèn)題
第31~34行:對(duì)文件描述符1000進(jìn)行寫(xiě)入操作。通過(guò)循環(huán)寫(xiě)入8個(gè)空行,這個(gè)8就是我們要定義的后臺(tái)并發(fā)的線程數(shù)。為什么是寫(xiě)空行而不是寫(xiě)其它字符?因?yàn)楣艿牢募淖x取,是以行為單位的
第37~42行:
第37行,read -u1000的作用就是讀取管道中的一行,在這里就是讀取一個(gè)空行;每次讀取管道就會(huì)減少一個(gè)空行
第39~41行,注意到第42行結(jié)尾的&嗎?它表示進(jìn)程放到linux后臺(tái)中執(zhí)行
第41行,執(zhí)行完后臺(tái)任務(wù)之后,往文件描述符1000中寫(xiě)入一個(gè)空行。這是關(guān)鍵所在了,由于read -u1000每次操作,都會(huì)導(dǎo)致管道減少一個(gè)空行,當(dāng)linux后臺(tái)放入了8個(gè)任務(wù)之后,由于文件描述符1000沒(méi)有可讀取的空行,將導(dǎo)致read -u1000一直處于等待。
虛擬kalilinux怎么破解wifi密碼?
首先,虛擬機(jī)內(nèi)是無(wú)法使用內(nèi)置無(wú)線網(wǎng)卡的,如果在虛擬機(jī)上用Kali破解wifi,是需要USB無(wú)線網(wǎng)卡的。
在kali里面破解無(wú)線網(wǎng):在終端輸入命令wifite,它會(huì)打開(kāi)網(wǎng)卡的監(jiān)聽(tīng)模式并掃描附近的無(wú)線網(wǎng)顯示出來(lái),顯示一會(huì)兒后按下鍵盤(pán)上的Ctrl+C組合鍵,它會(huì)讓你選擇破解的目標(biāo)網(wǎng)絡(luò),這時(shí)輸入序號(hào)(數(shù)字),它就會(huì)自動(dòng)進(jìn)行破解工作,破解完成有提示。原理:wifite命令是無(wú)線滲透測(cè)試的自動(dòng)化腳本,它實(shí)際上是個(gè)python腳本,用于自動(dòng)化調(diào)用kali上面的各種工具,像是reaver、aircrack-ng等。
它先嘗試PIN碼破解,無(wú)法用PIN碼破解時(shí),會(huì)嘗試抓取握手包,用字典進(jìn)行握手包的暴力破解。
PIN碼破解的時(shí)間比較短,握手包的暴力破解可能會(huì)用GPU加速,取決于主機(jī)的性能和密碼的復(fù)雜程度,虛擬機(jī)對(duì)握手包暴力破解很無(wú)力(性能局限),就指望PIN碼破解了。
linux信號(hào)量線程進(jìn)程區(qū)別?
信號(hào)量在進(jìn)程是以有名信號(hào)量進(jìn)行通信的,在線程是以無(wú)名信號(hào)進(jìn)行通信的,因?yàn)榫€程linux還沒(méi)有實(shí)現(xiàn)進(jìn)程間的通信,所以在sem_init的第二個(gè)參數(shù)要為0,而且在多線程間的同步是可以通過(guò)有名信號(hào)量也可通過(guò)無(wú)名信號(hào),但是一般情況線程的同步是無(wú)名信號(hào)量,無(wú)名信號(hào)量使用簡(jiǎn)單,而且sem_t存儲(chǔ)在進(jìn)程空間中,有名信號(hào)量必須LINUX內(nèi)核管理,由內(nèi)核結(jié)構(gòu)struct ipc_ids 存儲(chǔ),是隨內(nèi)核持續(xù)的,系統(tǒng)關(guān)閉,信號(hào)量則刪除,當(dāng)然也可以顯示刪除,通過(guò)系統(tǒng)調(diào)用刪除,
消息隊(duì)列,信號(hào)量,內(nèi)存共享,這幾個(gè)都是一樣的原理。,只不過(guò)信號(hào)量分為有名與無(wú)名
總結(jié)
以上是生活随笔為你收集整理的信号linux 安全(信号linux)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: MacOS 如何安装 SVN 命令终端
- 下一篇: ddos和服务器运行有影响吗(ddos和