我创建了这个脚本:
code fn()
{
sleep 1001
}
fn &
sleep 1000
echo "finish"
当我扯过它并列出进程时(它的pid是11570):
$ ps xao pid,ppid,pgid,command | grep 11570 |grep -v grep
11570 24322 11570 /bin/bash ./bash.sh
11577 11570 11570 /bin/bash ./bash.sh
11578 11570 11570 sleep 1000
11579 11577 11570 sleep 1001
然后我用ctrl + c杀死它,同样的ps返回:
11577 1 11570 /bin/bash ./bash.sh
11579 11577 11570 sleep 1001
然后:
kill -INT 11579
没什么好开心的(bg中仍然是相同的过程)
我知道 ctrl + c 与杀死它相同:
kill -INT -11570
同样的情况(相同的两个进程仍在后台)。 然后 - 在下一次运行中 - 我一个接一个地杀死了组中的进程,发现唯一关心的是睡眠中没有功能的。
我当时认为主要流程完成了,这就是它完成的原因。但是应该打印'完成'。 (就像我打断这个睡眠时一样)
现在的问题是:
为什么只有一个睡眠应答中断信号?
如何在中断时使这个脚本清理进程?
答案 0 :(得分:0)
不幸的是,它仅针对最后一个问题回答,但有人可以使用它。
要清理此捕获信号应该有效:
trap 'kill -TERM -$$' EXIT
在脚本的EXIT上,它正在向其组( - $$)发送TERMINATE信号。然后,将终止gpid与主进程pid相同的所有进程。
PS。 我仍然不知道为什么只有一个睡眠响应INT信号以及它为什么会发生。