【发布时间】:2019-08-09 03:41:40
【问题描述】:
我有一个基本的 bash 脚本,它打印出它的 pid,然后计数到 100:
echo $$
for i in {1..100}
do
echo $i
sleep 1
done
当我按下 ctrl+c 时,在运行时,程序将停止并显示退出代码 130。我正在尝试发送一个模拟 ctrl+c 的信号并导致程序停止并退出代码130.
当我从另一个终端窗口键入“kill -INT”时,什么也没有发生,但据我了解,它应该与按 ctrl+c 相同。但是,当我键入“kill -9”时,我可以成功终止程序,尽管使用不同的退出代码。如何使用中断信号停止我的程序,以便它使用正确的代码退出?
【问题讨论】:
-
你能重新澄清一下你的要求吗?该脚本已经在 Ctrl + C 上以代码 130 退出。您的意思是您希望您的脚本捕获信号并以 130 以外的代码退出?
-
@quantumbutterfly :
-9给你一个不同的退出代码,很明显,因为它是一个不同的信号,所以问题归结为为什么你的kill -INT没有交付。事实上,我可以在不需要整个脚本的情况下重现该案例:bash -c 'echo $$; sleep 120',然后在显示的 PID 上执行kill -INT。对我来说,它也不会终止该过程。如果我将其更改为bash -c 'trap "echo intreceived" INT; echo $$; sleep 120'并发送kill,我什至没有得到输出intreceived,这意味着没有传递信号。不知道为什么会这样。