Bash
來自後台作業的信號陷阱,無需按 Enter
在 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)。上述解決方案有效,因為陷阱位於非互動式外殼中(因此,當它收到信號時,它不在阻塞讀取的中間)。