c - 为什么 waitpid() 对所有子进程只返回 1?

标签 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 %d\n", pid, WEXITSTATUS(status));
    else
        printf("Child crashed\n");
}

初始化处理程序的代码。

void initSIGCHLDSignalHandler()
{
    struct sigaction act;

    memset(&act,'\0',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)

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

关于c - 为什么 waitpid() 对所有子进程只返回 1?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21666554/

相关文章:

c - 对 sqlite_open 的 undefined reference

c++ - 找不到我的错误!错误 : expected identifier before '(' token

c - Sscanf 扫描包含列的行

c - 使用 CMake 获取链接错误

从 x86 汇编器调用 C 函数

c - 最优二叉搜索树的重构动态方法

python struct模块打包解包返回值

c - 从 XML C 字符串表示中提取值节点

c - 编译后变量名存储在哪里?

c - 可能会失败的分配和操作顺序的正确模式