父进程等待子进程退出(2)
waitpid常量:
WNOHANG:waitpid不阻塞,此时pid为0。(不挂起,不阻塞)。
pid>0:等待pid值的那个进程
在父进程当中fork返回值的pid,就是子进程的pid。
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/wait.h>
int main()
{
pid_t pid;
int cnt=0;
int status=10;
pid=fork();
if(pid>0)
{
// wait(&status);
waitpid(pid,&status,WNOHANG);
printf("child quit,child stauts=%d\n",WEXITSTATUS(status));
while(1)
{
printf("cnt=%d\n",cnt);
printf("this is father print,father pid=%d\n",getpid());
sleep(1);
}
}
else if(pid==0)
{
while(1)
{
printf("this is child print,child pid=%d\n",getpid());
sleep(1);
cnt++;
if(cnt==5)
{
exit(3);
}
}
}
return 0;
}
运行结果:
父子一起执行,当子进程运行5次之后,子进程退出,一直执行父进程。
——@上官可编程