为什么 waitpid() 只为所有子进程返回 1

  • 本文关键字:子进程 返回 waitpid c
  • 更新时间 :
  • 英文 :


我有一个处理程序,用于在一个生成许多孩子的进程中SIGCHLD

此代码在我的处理程序中,pid始终1。我读过pid应该是子进程id.为什么我总是1回来?

int status;
pid_t pid;
while(pid = waitpid(-1, &status, WNOHANG) > 0)
{        
    if  (WIFEXITED(status))
        printf("Child %ld: Ended properly and returned %dn", pid, WEXITSTATUS(status));
    else
        printf("Child crashedn");
}

用于初始化处理程序的代码。

void initSIGCHLDSignalHandler()
{
    struct sigaction act;
    memset(&act,'',sizeof(struct sigaction));
    sigemptyset(&act.sa_mask);
    act.sa_flags = SA_NOCLDSTOP | SA_RESTART;
    act.sa_handler = SIGCHLD_SignalHandler;
    sigaction(SIGCHLD, &act, NULL);
}

我想你想要

while((pid = waitpid(-1, &status, WNOHANG)) > 0)

因为现在你得到的只是"真实"。 (您的编译器可能会对此发出警告,因此请阅读编译器警告。

最新更新