Bash

等待信號

  • May 13, 2020

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信號,“處理程序”將設置quit1,控制權將返回給程式碼,程式碼將退出循環。

引用自:https://unix.stackexchange.com/questions/450551