【发布时间】:2019-05-20 12:45:19
【问题描述】:
我想将几个功能放入我的.bashrc。
这些函数可能会执行很长时间,所以我希望能够用CTRL+C 杀死它们,并在发生这种情况时打印一些信息。我可以通过捕获SIGINT 来捕获CTRL+C,但我不确定为同一脚本中的不同函数设置不同的陷阱处理程序的正确方法是什么(.bashrc)。
我想出了这个似乎可行的解决方案:
function foo()
{
trap 'echo "foo() stopped"' SIGINT
while true; do
sleep 1
echo "foo() working..."
done
}
function bar()
{
trap 'echo "bar() stopped"' SIGINT
while true; do
sleep 1
echo "bar() working..."
done
}
示例输出:
$ foo
foo() working...
foo() working...
^Cfoo() stopped
$ bar
bar() working...
bar() working...
^Cbar() stopped
现在,我的问题是:
- 我是否正确理解每次我在函数内执行
trap ...时都会重置整个 bash 会话(进程)的信号处理程序?还是每次都创建一个新的处理程序? - 一般来说这是一个好的解决方案,还是有更好的解决方案?
【问题讨论】: