如何在C ++中不使用wait等待孩子

时间:2014-05-27 05:26:58

标签: c++

我尝试用g ++编写,我的代码如下所示:

#include <iostream>
#include <unistd.h>
#include <signal.h>
#include <stdlib.h>
using namespace std;

void h(int sNo){
    cout << "Called!" << endl;
}

int main(){
    signal(SIGINT,h);
    pid_t id;
    switch(id = fork()){
    case 0:
        kill(getppid(),0);
        exit(0);
        break;
    default:
        while(kill(id,0)==0){
            cout << "waiting for child" << endl; sleep(1);
        }
        break;
    }
    return 0;
}

但失败了!因为父进程没有停止等待....!

1 个答案:

答案 0 :(得分:0)

子进程已经死了,但由于你没有打电话给wait,它就变成了一个“僵尸”。 kill将始终返回0,因为孩子仍然活着......作为不死生物:P

查看备注部分:http://linux.die.net/man/2/wait

摘录:

  

终止但尚未等待的孩子成为了   “僵尸”。内核维护有关的最小信息集   僵尸进程(PID,终止状态,资源使用信息)   为了让父母稍后进行等待获得   关于孩子的信息。只要没有移除僵尸   系统通过等待,它将消耗内核进程中的一个槽   表,如果此表填充,则无法创建   进一步的过程如果父进程终止,那么它的“僵尸”   子节点(如果有的话)由init(8)采用,它自动执行   等待移除僵尸。

更新:只是读到您不想使用wait,但我不确定您为什么不想这样做。使用wait是确保清理孩子使用的资源的正确方法。