首页 > 解决方案 > 检查子进程是否已在 Unix 上的 C 中终止而没有阻塞

问题描述

我想检查子进程是否/何时在 Unix 上的 C 中终止。它不应该阻塞,而是循环中的简短检查。我的代码:

pid_t pid = fork();
if (pid > 0)
    // Parent Process
    while (1) {
        // Do a short check whether Child has already terminated if yes break the loop.
    // Ik that it's possible to use waitpid(pid, &status, 0) but that blocks the whole loop until the child has terminated 

    }
if (pid == 0)
    printf("child process born");
    exit(0);

提前谢谢

标签: cunixprocessforkparent

解决方案


第三个参数waitpid是一组标志。如果你传递WNOHANG给这个参数,如果没有孩子还没有退出,函数将立即返回。

然后您可以检查是否waitpid返回 0。如果是,则没有子退出,您等待并重试。

while (1) {
    pid_t rval = waitpid(pid, &status, WNOHANG);

    if (rval == -1) {
        perror("waitpid failed");
        exit(1);
    } else if (rval == 0) {
        sleep(1);
    } else {
        break;
    }
}

推荐阅读