1 #include<stdio.h>2 #include<unistd.h>3 #include<stdlib.h>4 #include<sys/wait.h>56voidmain()7{8int status;9 pid_t pid =fork();10if(pid ==-1)11{12perror("fork error:");13exit(1);14}15elseif(pid ==0)16{17printf("我是子进程!!!听歌\n");18sleep(40);19printf("chilrd is died\n");20}21elseif(pid >0)22{23printf("I am father,waitting for child\n");24 pid_t wpid =wait(&status);25if(wpid ==-1)26{27perror("wait error:");28exit(1);29}30elseif(WIFEXITED(status))31{32printf("child process is normally stop ed:%d\n",WEXITSTATUS(status));33}34elseif(WIFSIGNALED(status))35{36printf("child process is abnormally st oped:%d\n",WTERMSIG(status));37}38}3940}
waitpid函数
#include<sys/types.h>#include<sys/wait.h>
pid_t waitpid(pid_t pid,int*status,int options);
功能:等待指定的子进程结束
pid:要等待子进程的pid
status:子进程结束时返回的终止状态(同wait函数中的介绍)
options:等待方式
返回值:结束子进程的pid
if pid>0,等待进程id为要等待的子进程的pid
if pid==0,回收本组的子进程
if pid==-1,与wait等效
if pid<-1,回收指定组的子进程
options的取值:
1.WNOHANG:非阻塞式,如果子进程没有退出,waitpid返回0
如果子进程退出,则回收子进程
2.WUNTRACED:,用于调试,子进程退出时返回。
3.0:阻塞,waitpid(-1,&status,0)==wait(&status);