2014-01-19 26 views
0

它看起來像在bash中,如何在不停止腳本的情況下捕獲並處理SIGINT?

trap on_sigint SIGINT 

只是儘快SIGINT被捕獲停止腳本。然後,執行on_sigint。 是否可以在不停止腳本的情況下處理SIGINT

+0

你的'on_sigint'做了什麼?你能顯示你的代碼嗎?只有當您的SIGINT處理程序退出腳本時,該腳本纔會停止。 – lurker

+0

函數是:'on_SIGINT(){''收到echo'<< SIGINT >>'; stop = 1; echo'will stop。'}' – loxaxs

+0

你知道腳本名稱區分大小寫嗎?所以如果你的中斷處理程序被命名爲'on_SIGINT'並且你正在執行'trap on_sigint',那麼你的陷阱將不會被執行。您應該將您的代碼添加到問題描述中。還有腳本的其他部分是在看'stop'還是退出,如果它是'1'? – lurker

回答

4

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 

如果你的觀察是正確的,最後一行就不會一直存在。

+0

你說得對,這個問題似乎只在按^ C中斷命令時纔會發生。它看起來像首先中斷腳本的運行命令,然後處理信號。 – loxaxs

相關問題