/*
1. wait function 是完全阻塞,而waitpid function可以通过设置第三个参束option来设置为非阻塞式 .
2. waitpid 可以指定等待某一个子进程,wait则等待任何一个子进程
*/
#include
#include
#include
#include
#include
void show_status(int status)
{
if(WIFEXITED(status))
printf("normal termination,exit status is %d\n",WEXITSTATUS(status));
if(WIFSIGNALED(status))
printf("terminated by abnormal signal,signal number is %d %s\n",
WTERMSIG(status),WCOREDUMP(status) ? "(core file generated)":"");
if(WIFSTOPPED(status))
printf("child process stopped,signal number is %d\n",WSTOPSIG(status));
}
int main(void)
{
pid_t pid;
int status,i;
if((pid=fork())<0){
printf("fork failed");
exit(1);
}
else if (pid==0)
exit(0);
if(wait(&status)!=pid){
printf("wait failed");
exit(1);
}
show_status(status);
if((pid=fork())<0){printf("fork failed");exit(1);}
else if(pid==0)
abort();
if(wait(&status)!=pid){
printf("wait failed");
exit(1);
}
show_status(status);
if((pid=fork())<0){
printf("fork failed");
exit(1);
}
else if(pid==0)
i/=0; /*睇睇...就悟系正常结束子进程*/
if(wait(&status)!=pid){
printf("wait failed");
exit(1);
}
show_status(status);
exit(0);
}
阅读(788) | 评论(0) | 转发(0) |