程序:
#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
}