2014-01-19 28 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

相关问题