Chinaunix首页 | 论坛 | 博客
  • 博客访问: 158837
  • 博文数量: 45
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 273
  • 用 户 组: 普通用户
  • 注册时间: 2014-05-28 10:30
文章分类
文章存档

2017年(6)

2016年(3)

2015年(8)

2014年(28)

我的朋友

分类: LINUX

2016-08-08 23:01:47

1、apue书上已经有了实例,调用fork两次,一个子进程退出,则第二个子进程有init进程领养,退出的时候就不会变成僵尸进程。

2、如果父进程在fork之前设置了SIGCLD信号的动作为SIG_IGN,则有该父进程创建的子进程在退出时不会变成僵尸进程。事例如下:

  1. #include <unistd.h>
  2. #include <stdio.h>
  3. #include <string.h>
  4. #include <signal.h>
  5. int
  6. main()
  7. {
  8.     pid_t pid1 = 0;
  9.     pid_t pid2 = 0;
  10.     int i = 0;
  11.     if(signal(SIGCLD, SIG_IGN) != SIG_ERR)
  12.     {
  13.         printf("set signal sucessfully\n");
  14.     }
  15.     pid1 = fork();
  16.     if(pid1 < 0)
  17.     {
  18.         printf("fork error\n");
  19.         return -1;
  20.     }
  21.     if(pid1 == 0)
  22.     {
  23.         printf(" i am child\n");
  24.         return 0;
  25.     }
  26.     else
  27.     
  28.     {
  29.         printf(" parent\n");
  30.         while( i < 10)
  31.         {
  32.                 i++;
  33.                 sleep(3);
  34.         }
  35.         return -1;

  36.     }

  37. }

 利用ps-aux查看,没有状态为z的僵尸进程。

阅读(896) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~