阻塞式等待
#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
#include<sys/wait.h>
int main()
{
pid_t pid;
pid=fork();
if(pid<0)
{
printf("fork error\n");
return 1;
}
else if(pid==0)
{
printf("child id running,pid is:%d\n",getpid());
sleep (5);
exit(2);
}
else
{
int status=0;
pid_t ret=waitpid(-1,&status,0);
printf("test wait\n");
if(WIFEXITED(status)&& ret==pid)
{
printf("wait 5s,child return code is: %d\n",WEXITSTATUS(status));
}
else
{
printf("wait child failed\n");
return 1;
}
}
return 0;
}
非阻塞式等待:
#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
#include<sys/wait.h>
int main()
{
pid_t pid;
pid=fork();
if(pid<0)
{
printf("fork error\n");
return 1;
}
else if(pid==0)
{
printf("child id running,pid is:%d\n",getpid());
sleep (5);
exit(2);
}
else
{
int status=0;
pid_t ret=0;
do
{
ret=waitpid(-1,&status,WNOHANG);
if(ret==0)
{
printf("child is running\n");
}
sleep(1);
}while(ret==0);
if(WIFEXITED(status)&& ret==pid)
{
printf("wait 5s,child return code is: %d\n",WEXITSTATUS(status));
}
else
{
printf("wait child failed\n");
return 1;
}
}
return 0;
}