程序:

#include<stdio.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/wait.h>
#include<stdlib.h>

int main()
{
    int pid=fork();
    if(pid==0){
        printf("Child Executing: PID = %d\n",getpid());
        pause();
    }
    else{
        printf("Parent waiting: PID = %d\n",getpid());
        int status;
        waitpid(pid,&status,WNOHANG);
        if(WIFEXITED(status))
            printf("Child Terminates Normally\n");
        else if(WIFSIGNALED(status))
            printf("Child terminated by signal\n");
    }
}

在上面的程序中,我将wnohang宏传递给waitpid函数的option参数。它不会等待子进程
完成。那么,Wnohang有什么用呢?手册页包含以下语句,
WNOHANG return immediately if no child has exited.
我不明白确切的意思。那么,Wnohang的用途和我们使用它的地方。有没有Wnohang的实时用例。
提前谢谢。

最佳答案

如果您定期轮询,查看进程是否已退出,则使用此方法。如果您没有继续您的程序的其余部分:

while (some_condition) {
    result = waitpid(pid, &status, WNOHANG);
    if (result > 0) {
        // clean up the process
    } else if (result < 0) {
        perror("waitpid");
    }
    // do other processing
}

10-06 14:18