在ubuntu系统中,编写一C语言程序,实现在程序运行时通过系统调用fork( )创建两个子进程,使父、子三进程并发执行,在父、子进程中分别使用wait、exit等系统调用“实现”其同步推进,父进程必须等待儿子进程与女儿进程结束,才可以输出消息。写出相应的程序和运行结果,并分析运行结果。
时间: 2024-03-22 07:38:21 浏览: 97
好的,我会给你提供一个示例代码,但是请注意,在这里我无法运行代码,只能给你提供代码。你需要在自己的ubuntu系统中运行代码。
```
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<sys/wait.h>
int main()
{
pid_t pid1,pid2;
int status1,status2;
printf("父进程开始执行\n");
pid1 = fork();
if(pid1 < 0)
{
printf("创建子进程1失败\n");
exit(1);
}
else if(pid1 == 0)//第一个子进程
{
printf("第一个子进程开始执行\n");
sleep(1);
printf("第一个子进程结束执行\n");
exit(100);
}
else//父进程
{
pid2 = fork();
if(pid2 < 0)
{
printf("创建子进程2失败\n");
exit(1);
}
else if(pid2 == 0)//第二个子进程
{
printf("第二个子进程开始执行\n");
sleep(2);
printf("第二个子进程结束执行\n");
exit(200);
}
else//父进程
{
printf("父进程开始等待子进程\n");
waitpid(pid1,&status1,0);
waitpid(pid2,&status2,0);
printf("两个子进程执行完毕\n");
printf("子进程1的结束状态为:%d\n",WEXITSTATUS(status1));
printf("子进程2的结束状态为:%d\n",WEXITSTATUS(status2));
printf("父进程结束执行\n");
}
}
return 0;
}
```
程序的主要思路是,创建两个子进程,每个子进程分别执行一些操作,然后父进程等待两个子进程执行完毕,再输出一些信息。
在程序开始执行时,先输出一条消息,表示父进程开始执行。然后调用fork()函数创建第一个子进程。如果创建失败,则输出一条错误信息并退出程序。如果创建成功,则判断当前进程是否是子进程。如果是子进程,则输出一条消息表示子进程开始执行,然后调用sleep()函数暂停1秒钟,再输出一条消息表示子进程结束执行,并且调用exit()函数退出子进程。如果是父进程,则再次调用fork()函数创建第二个子进程。如果创建失败,则输出一条错误信息并退出程序。如果创建成功,则判断当前进程是否是子进程。如果是子进程,则执行和第一个子进程类似的操作。如果是父进程,则输出一条消息表示父进程开始等待子进程,然后调用waitpid()函数等待第一个子进程结束,并且将结束状态保存在status1变量中。接着,再次调用waitpid()函数等待第二个子进程结束,并且将结束状态保存在status2变量中。最后,输出一些信息,表示两个子进程执行完毕,并且输出两个子进程的结束状态。最后,程序结束执行。
你可以在Ubuntu系统上编译并运行该程序,观察程序的输出结果。
阅读全文
相关推荐


















