Linux使用prctl API, 在父进程退出后,让子进程也退出

(转载)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 ~]#
从程序输出可以看到当父进程退出了,那么子进程也就退出了。

你可能感兴趣的:(linux)