ctrl-c 会中断子进程吗?

时间:2023-01-11 04:00:48
如果一个进程产生一个子进程,ctrl-c 能中断子进程和父进程吗?

多谢!

7 个解决方案

#1


该回复于2011-03-03 10:19:57被版主删除

#2


如果没有改变组长进程,那么,会中断,因为此时默认的组长进程被Ctrl+C终止了,所以子进程也将终止。你可以通过setsid()将另一个进程设为它的组长进程,子进程就不会挂掉了。
记不大清楚了,就是这个过程

#3


按键产生的中断信号只能发给前台进程组

如果以后台方式运行,则不会收到信号

#4


引用 3 楼 justkk 的回复:
按键产生的中断信号只能发给前台进程组

如果以后台方式运行,则不会收到信号

严重同意

#5


ctrl+c会产生一个SIGINT的中断信号,只有父进程会捕获到这个信号,系统的默认处理是终止进程,那么其实是父进程被杀死了,子进程就会成为孤儿进程。如果不想让父进程终止,你可以用signal函数来捕获SIGINT这个消息,然后自己写一个函数,当捕获到这个信号的时候,执行你的函数,进行你想要的操作。

#6


我做了一个测试

#!/bin/sh

echo "PID $$"
trapeze () {
        echo "HIT ctrl-c"
}


trap trapeze 2

       
        ping 127.0.0.1  & #child
        echo "child pid $!"
        sleep 30

如果我在30秒内做了ctrl-c, 子进程和父进程都会消失


但是如果我没有 最后的 “sleep30” 那么父进程很快结束,只有子进程,这时再做ctrl-c,子进程也不消失

#7


引用 6 楼 wonderqin 的回复:
但是如果我没有 最后的 “sleep30” 那么父进程很快结束,只有子进程,这时再做ctrl-c,子进程也不消失


父进程终止后,其原来的子进程被init进程接管,不再是前台进程
此时shell重新成为前台进程

#1


该回复于2011-03-03 10:19:57被版主删除

#2


如果没有改变组长进程,那么,会中断,因为此时默认的组长进程被Ctrl+C终止了,所以子进程也将终止。你可以通过setsid()将另一个进程设为它的组长进程,子进程就不会挂掉了。
记不大清楚了,就是这个过程

#3


按键产生的中断信号只能发给前台进程组

如果以后台方式运行,则不会收到信号

#4


引用 3 楼 justkk 的回复:
按键产生的中断信号只能发给前台进程组

如果以后台方式运行,则不会收到信号

严重同意

#5


ctrl+c会产生一个SIGINT的中断信号,只有父进程会捕获到这个信号,系统的默认处理是终止进程,那么其实是父进程被杀死了,子进程就会成为孤儿进程。如果不想让父进程终止,你可以用signal函数来捕获SIGINT这个消息,然后自己写一个函数,当捕获到这个信号的时候,执行你的函数,进行你想要的操作。

#6


我做了一个测试

#!/bin/sh

echo "PID $$"
trapeze () {
        echo "HIT ctrl-c"
}


trap trapeze 2

       
        ping 127.0.0.1  & #child
        echo "child pid $!"
        sleep 30

如果我在30秒内做了ctrl-c, 子进程和父进程都会消失


但是如果我没有 最后的 “sleep30” 那么父进程很快结束,只有子进程,这时再做ctrl-c,子进程也不消失

#7


引用 6 楼 wonderqin 的回复:
但是如果我没有 最后的 “sleep30” 那么父进程很快结束,只有子进程,这时再做ctrl-c,子进程也不消失


父进程终止后,其原来的子进程被init进程接管,不再是前台进程
此时shell重新成为前台进程