我有一个基本的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”时,我可以成功地终止程序,尽管退出码不同。如何使用中断信号停止我的程序,使其以正确的代码退出?
-9
给你一个不同的退出代码是显而易见的,因为它是一个不同的信号,所以问题归结为为什么你的kill -INT
没有被传递。事实上,我可以在不需要整个脚本的情况下重现这种情况:bash -c 'echo $$; sleep 120'
,然后在显示的PID上执行kill -INT
。对我来说,它也不能终止进程。如果我将其更改为bash -c 'trap "echo intreceived" INT; echo $$; sleep 120'
并发送_kill_,我甚至没有得到输出_intreceived_,这意味着信号没有被传递。不知道为什么会出现这种情况。 - user1934428