(转载)http://www.cnblogs.com/cornsea/archive/2010/06/08/1754369.html
例子1:
#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <signal.h> #include <sys/prctl.h> void my_system(void) { pid_t pid; pid = fork(); if (pid == 0) { //prctl(PR_SET_PDEATHSIG, SIGHUP); while (1) { printf("child running...\n"); sleep(1); } exit(0); } else if (pid < 0) { printf("create failed\n"); } } int main (int argc, char *argv[]) { int i = 0; my_system(); while (i++ < 6) { printf("father running...\n"); sleep(1); } printf("Main exit()\n"); return 0; }
程序输出:
[root@localhost ~]# ./a.out
child running...
father running...
child running...
father running...
child running...
father running...
child running...
father running...
child running...
father running...
child running...
father running...
child running...
Main exit()
[root@localhost ~]# child running...
child running...
child running...
child running...
child running...
child running...
可以看到当父进程结束了,子进程还在运行,此时的子进程变成了孤儿进程了。
例子2:
#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <signal.h> #include <sys/prctl.h> void my_system(void) { pid_t pid; pid = fork(); if (pid == 0) {
// 设置当父进程退出时,子进程也退出 prctl(PR_SET_PDEATHSIG, SIGHUP); while (1) { printf("child running...\n"); sleep(1); } exit(0); } else if (pid < 0) { printf("create failed\n"); } } int main (int argc, char *argv[]) { int i = 0; my_system(); while (i++ < 6) { printf("father running...\n"); sleep(1); } printf("Main exit()\n"); return 0; }
程序输出:
[root@localhost ~]# ./a.out
child running...
father running...
child running...
father running...
child running...
father running...
child running...
father running...
father running...
child running...
father running...
child running...
child running...
Main exit()
[root@localhost ~]#
[root@localhost ~]#
[root@localhost ~]#
从程序输出可以看到当父进程退出了,那么子进程也就退出了。