慕尼黑0001808 的学生作业:
#include
#include
#include
#include
int main(int argc, char *argv[])
{
pid_t pid_a,pid_b;
pid_a = fork();
if(-1 == pid_a){
perror("A:fork()fail");
exit(EXIT_FAILURE);
}else if(0 == pid_a){
printf("子进程A(pid=%d)运行中......\n",getpid());
sleep(2);
printf("子进程A(pid=%d)退出,将不会往下执行,因为下面有一个exit函数结束\n",getpid());
exit(EXIT_SUCCESS);
}
pid_b = fork();
if(-1 == pid_b){
perror("A:fork fail");
exit(EXIT_FAILURE);
}else if(0 == pid_b){
printf("子进程B(pid=%d)运行中......\n",getpid());
sleep(5);
printf("子进程B(pid=%d)退出,将不会往下执行,因为下面有一个exit函数结束\n",getpid());
exit(EXIT_SUCCESS);
}
printf("父进程(pid=%d)运行中,等待所有子进程退出\n",getpid());
int status_a;
waitpid(pid_a,&status_a,0);
if(WIFEXITED(status_a)){
printf("父进程:子进程B(pid=%d)正常退出,退出状态码%d\n",pid_a,WEXITSTATUS(status_a));
}
int status_b;
waitpid(pid_b,&status_b,0);
if(WIFEXITED(status_b)){
printf("父进程:子进程B(pid=%d)正常退出,退出状态码%d\n",pid_b,WEXITSTATUS(status_b));
}
printf("父进程(pid=%d)完成等待,退出\n",getpid());
return 0;
}
运行结果:
linux@linux-VMware-Virtual-Platform:~/study/homework/1036$ gcc main.c
linux@linux-VMware-Virtual-Platform:~/study/homework/1036$ ./a.out
父进程(pid=5515)运行中,等待所有子进程退出
子进程A(pid=5516)运行中......
子进程B(pid=5517)运行中......
子进程A(pid=5516)退出,将不会往下执行,因为下面有一个exit函数结束
父进程:子进程B(pid=5516)正常退出,退出状态码0
子进程B(pid=5517)退出,将不会往下执行,因为下面有一个exit函数结束
父进程:子进程B(pid=5517)正常退出,退出状态码0
父进程(pid=5515)完成等待,退出
linux@linux-VMware-Virtual-Platform:~/study/homework/1036$