實驗1
有下面的bash**,指令碼名signal.bash。
#!/bin/bash
trap 'echo intrrupted by signal int' int
seconds0=$(date +%s)
sleep 60s
seconds1=$(date +%s)
echo "sleeped seconds : $((seconds1 - seconds0))s"
chenglin@ubuntu-chenglin:~/shellscript/other$ time ./signal.bash
^cintrrupted by signal int
sleeped seconds : 22s
real 0m21.427s
user 0m0.000s
sys 0m0.004s
ctrl+c後能立即停止signal.bash指令碼的執行。
分析: 前台執行signal.bash指令碼,其所有子程式(外部命令)和signal.bash程式在同乙個程序組。而ctrl+c會傳送給前台程序組所有程序int訊號。signal.bash執行後會產生兩個程序,乙個是signal.bash程式本身,另外乙個是sleep程式(sleep是外部命令)。而sleep和signal.bash在同乙個前台程序組,所以ctrl+c時,sleep程式由於處於task_interruptible
狀態(ps -axu可以看到其狀態是s+)。所以會被訊號int喚醒,訊號action為終止程序,自然父程序繼續執行。得出執行,直到sleep被訊號int中斷的睡眠時間。
實驗2
現在做另外乙個實驗:
開兩個終端,第乙個終端裡面執行time ./signal.bash。迅速(60s內)在第二個終端裡面執行如下:
chenglin@ubuntu-chenglin:~/shellscript/powerconsumption-net$ pgrep -f signal.bash -l
25700 signal.bash
chenglin@ubuntu-chenglin:~/shellscript/powerconsumption-net$ kill -int 25700
發現第乙個終端中列印如下:
chenglin@ubuntu-chenglin:~/shellscript/other$ time ./signal.bash
intrrupted by signal int
sleeped seconds : 60s
real 1m0.013s
user 0m0.004s
sys 0m0.004s
第二個終端不能立即停止第乙個終端中signal.bash的執行。
分析: 在第二個終端是,訊號int是指定傳送給signal.bash的,而不是sleep的,所以sleep沒有接收到int訊號,而繼續睡眠,直到指定的時間60s後,當60s後,sleep返回。主程式signal.bash此時才會處理訊號。列印intrrupted by signal int,說明處理了訊號int。
實驗3
現在做第三個實驗:
開兩個終端,第乙個終端裡面執行time ./signal.bash。迅速(60s內)在第二個終端裡面執行如下:
chenglin@ubuntu-chenglin:~/shellscript/powerconsumption-net$ pgrep -f sleep -l
25708 sleep
chenglin@ubuntu-chenglin:~/shellscript/powerconsumption-net$ kill -int 25708
chenglin@ubuntu-chenglin:~/shellscript/powerconsumption-net$
發現第乙個終端列印如下:
chenglin@ubuntu-chenglin:~/shellscript/other$ time ./signal.bash
sleeped seconds : 16s
real 0m15.915s
user 0m0.000s
sys 0m0.008s
分析:和實驗2不同,這裡是直接對sleep傳送int訊號,可以直接喚醒sleep程序,並終止。但是注意到signal.bash並沒有列印intrrupted by signal int,因為訊號是發給sleep程序,而不是signal.bash程序的。所以sgnal.bash程序無需處理int訊號。
git命令的一些命令
1 git是一款開源的分布式版本控制工具 工作區 working directory 倉庫資料夾裡除.git目錄以外的內容 版本庫 reository git目錄,用於儲存記錄版本資訊 暫緩區 stage 分支 master git自動建立的第乙個分支 head指標 用於指向當前分支 git add...
oracle的一些命令
create tablespace datafile data 00.dbf size 500m create user identified by passwd default tablespace tbs temporary tablespace temp create table id int...
mysql的一些命令
windows使用者 要這麼載入多條資料 mysql load data local infile path pet.txt into table pet lines terminated by r n txt檔案寫法 空值的用 n代替,每個值之間用tab隔開 fluffy harold cat f...