您的位置:首页 > 运维架构 > Linux

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

2013-05-07 15:56 393 查看

例子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 ~]#
从程序输出可以看到当父进程退出了,那么子进程也就退出了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: