2013-10-25 106 views
0

shell腳本中的一系列命令如何在不受任何其他進程干擾的情況下執行?無中斷地執行Shell腳本

+0

不要中斷它們。 – 2013-10-25 12:44:13

+0

你的意思是什麼樣的「中斷」?你能給個例子嗎? –

回答

0

你的意思是,沒有被搶佔?沒門。內核調度程序可以隨時選擇要執行的任務。但是,在Linux上,您可以設置「實時」優先級(即SCHED_FIFO或SCHED_RR),以確保腳本不會被中斷以執行較低優先級的任務。

0

如果你問如何讓shell進程忽略中斷或其他信號,答案是通過trap命令。

trap "" 2 

或:

trap "" INT 

要取消的行爲,不列出在字符串中的任何東西:

trap 2 
trap INT 

如果您需要刪除中斷(及相關信號的臨時文件),你可以使用類似的東西:

tmp=$(mktemp ${TMPDIR:-/tmp}/name.XXXXXX) 
trap "rm -f $tmp; exit 1" 0 1 2 3 13 15 # EXIT HUP INT QUIT PIPE TERM 

...do operations using temporary files... 

rm -f $tmp 
trap 0  # Cancel the exit trap 

顯示的這組信號是一個非常全面的集合,覆蓋了大部分正常事件。如果您發送SIGKILL(kill -9),臨時將留下 - 沒有什麼可以做的。 mktemp命令安全地創建該文件(請參閱Why do we need mktemp?),但實際上在創建文件和爲腳本設置陷阱之間留下一個小小的機會窗口,以便讓腳本中斷,並將臨時文件留在周圍。