多谢!
7 个解决方案
#1
#2
如果没有改变组长进程,那么,会中断,因为此时默认的组长进程被Ctrl+C终止了,所以子进程也将终止。你可以通过setsid()将另一个进程设为它的组长进程,子进程就不会挂掉了。
记不大清楚了,就是这个过程
记不大清楚了,就是这个过程
#3
按键产生的中断信号只能发给前台进程组
如果以后台方式运行,则不会收到信号
如果以后台方式运行,则不会收到信号
#4
严重同意
#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,子进程也不消失
#!/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
父进程终止后,其原来的子进程被init进程接管,不再是前台进程
此时shell重新成为前台进程
#1
#2
如果没有改变组长进程,那么,会中断,因为此时默认的组长进程被Ctrl+C终止了,所以子进程也将终止。你可以通过setsid()将另一个进程设为它的组长进程,子进程就不会挂掉了。
记不大清楚了,就是这个过程
记不大清楚了,就是这个过程
#3
按键产生的中断信号只能发给前台进程组
如果以后台方式运行,则不会收到信号
如果以后台方式运行,则不会收到信号
#4
严重同意
#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,子进程也不消失
#!/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
父进程终止后,其原来的子进程被init进程接管,不再是前台进程
此时shell重新成为前台进程