杀死某个子进程
杀死守护进程的子进程后,改进程会变为僵尸进程
14087 ? Ss 0:00 ./test4-1
14088 ? S 0:00 \_ ./test4-1
14089 ? S 0:00 \_ ./test4-1
14090 ? S 0:00 \_ ./test4-1
14091 ? S 0:00 \_ ./test4-1
14092 ? S 0:00 \_ ./test4-1
14093 ? S 0:00 \_ ./test4-1
14094 ? S 0:00 \_ ./test4-1
14095 ? S 0:00 \_ ./test4-1
14096 ? S 0:00 \_ ./test4-1
14097 ? S 0:00 \_ ./test4-1
[[email protected] 04]# kill -9 14090
[[email protected] 04]# ps -xf
执行后:
14087 ? Ss 0:00 ./test4-1
14088 ? S 0:00 \_ ./test4-1
14089 ? S 0:00 \_ ./test4-1
14090 ? Z 0:00 \_ [test4-1] <defunct>
14091 ? S 0:00 \_ ./test4-1
14092 ? S 0:00 \_ ./test4-1
14093 ? S 0:00 \_ ./test4-1
14094 ? S 0:00 \_ ./test4-1
14095 ? S 0:00 \_ ./test4-1
14096 ? S 0:00 \_ ./test4-1
14097 ? S 0:00 \_ ./test4-1
[[email protected] 04]#
杀死父进程
守护进程的父进程后,僵尸进程释放,正常子进程变为正常进程
[[email protected] 04]# kill -9 14087
[[email protected] 04]# ps -xf
僵尸进程消失了
14088 ? S 0:00 ./test4-1
14089 ? S 0:00 ./test4-1
14091 ? S 0:00 ./test4-1
14092 ? S 0:00 ./test4-1
14093 ? S 0:00 ./test4-1
14094 ? S 0:00 ./test4-1
14095 ? S 0:00 ./test4-1
14096 ? S 0:00 ./test4-1
14097 ? S 0:00 ./test4-1
杀死所有进程
直接使用进程名称
pkill 进程名
让子进程随父进程一同结束
在创建进程后使用prctl,监听父进程的DEATHSIG
for (i = 0; i < 10; i++) {
sleep(3);
printf("new fork() process pid = %d \n", pid);
pid = fork();
if (pid == 0) {
prctl(PR_SET_PDEATHSIG,SIGKILL);
break;
}
}
当父进程死亡后,子进程会自动收到信号并结束,不会产生僵尸进程和孤儿进程
14508 ? Ss 0:00 ./test4-2
14509 ? S 0:00 \_ ./test4-2
14510 ? S 0:00 \_ ./test4-2
14511 ? S 0:00 \_ ./test4-2
14512 ? S 0:00 \_ ./test4-2
14513 ? S 0:00 \_ ./test4-2
14514 ? S 0:00 \_ ./test4-2
14515 ? S 0:00 \_ ./test4-2
14516 ? S 0:00 \_ ./test4-2
14517 ? S 0:00 \_ ./test4-2
14518 ? S 0:00 \_ ./test4-2
[[email protected] 04]# kill -9 14508
[[email protected] 04]# ps -xf
6786 ? S 0:00 /usr/libexec/gconfd-2
[[email protected] 04]#
[[email protected] 04]#
[[email protected] 04]#