记录linux下避免僵尸进程的方法

890阅读 0评论2016-08-08 B_C_1024
分类:LINUX

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的僵尸进程。

上一篇:几种TCP连接中出现RST的情况
下一篇:父进程是init一定不会变僵尸进程吗?