Bash

來自後台作業的信號陷阱,無需按 Enter

  • February 17, 2019

在 Bash 5 中,我遇到了我想要執行以下操作的情況:

trap 'echo trapped!' USR1
while true; do kill -SIGUSR1 $$; sleep 1; done &

但是每次發送信號時我都必須在鍵盤上按 enter 才能使陷阱程式碼繼續。

實際上,我希望在沒有任何鍵盤互動的情況下執行陷阱。

編輯:

最後我讓它像這樣工作:

trap 'echo trapped!' USR1
while true; do kill -USR1 $$; kill -INT $$; sleep 1; done &

但我認為解決方案是解決方法,而不是答案。

有人似乎在這裡有一個非常相似的問題。

長話短說,如果可以從子程序中內置的陷阱執行命令(在這種情況下為“迴聲陷阱!”)。您可以將命令放在文件中(例如a.sh):

trap 'echo trapped!' USR1
while true; do kill -USR1 $$; sleep 1; done

bash a.sh &

並以後台程序執行文件當這種情況發生時(你已經註意到它確實處理了 SIGINT)。上述解決方案有效,因為陷阱位於非互動式外殼中(因此,當它收到信號時,它不在阻塞讀取的中間)。

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