0
它看起來像在bash中,如何在不停止腳本的情況下捕獲並處理SIGINT?
trap on_sigint SIGINT
只是儘快SIGINT
被捕獲停止腳本。然後,執行on_sigint
。 是否可以在不停止腳本的情況下處理SIGINT
?
它看起來像在bash中,如何在不停止腳本的情況下捕獲並處理SIGINT?
trap on_sigint SIGINT
只是儘快SIGINT
被捕獲停止腳本。然後,執行on_sigint
。 是否可以在不停止腳本的情況下處理SIGINT
?
SIGINT
不會在處理程序運行後終止腳本。這裏是一個小的,獨立的測試案例:
trap on_sigint SIGINT
on_sigint() { echo "caught"; }
{ sleep 3; kill -SIGINT $$; } &
echo "Waiting for sigint"
sleep 5
echo "Still running"
輸出是:
Waiting for sigint
caught
Still running
如果你的觀察是正確的,最後一行就不會一直存在。
你說得對,這個問題似乎只在按^ C中斷命令時纔會發生。它看起來像首先中斷腳本的運行命令,然後處理信號。 – loxaxs
你的'on_sigint'做了什麼?你能顯示你的代碼嗎?只有當您的SIGINT處理程序退出腳本時,該腳本纔會停止。 – lurker
函數是:'on_SIGINT(){''收到echo'<< SIGINT >>'; stop = 1; echo'will stop。'}' – loxaxs
你知道腳本名稱區分大小寫嗎?所以如果你的中斷處理程序被命名爲'on_SIGINT'並且你正在執行'trap on_sigint',那麼你的陷阱將不會被執行。您應該將您的代碼添加到問題描述中。還有腳本的其他部分是在看'stop'還是退出,如果它是'1'? – lurker