Bash
等待信號
在
bash
腳本中,是否有一種簡單的方法來等待信號,例如:wait -s SIGINT
管他呢?也許只是
trap
?
不。
wait
專門用於父程序以等待子程序終止(並訪問其退出狀態)。此外,沒有程序可以擷取信號(用作範例
KILL
的原始問題)。KILL
此外,“等待信號”是一件不尋常的事情,因為信號是非同步事件,這意味著您不等待它們,而是安裝一個信號處理程序(
trap
在 shell 中使用)來處理當它到達時發出信號。信號可能在腳本執行期間的任何時間到達,並且在發生這種情況時將執行信號處理程序(正常程序流程將在處理信號時暫時暫停)。顯然,你可以做類似的事情
trap 'quit=1' USR1 quit=0 while [ "$quit" -ne 1 ]; do printf 'Do "kill -USR1 %d" to exit this loop after the sleep\n' "$$" sleep 1 done echo The USR1 signal has now been caught and handled
做一個“等待信號到達”循環。
在這裡,“陷阱”將“擷取”
USR1
信號,“處理程序”將設置quit
為1
,控制權將返回給程式碼,程式碼將退出循環。