使用系统调用fork()创建两个子进程,在此程序运行时,系统中就有一个父进程和两个子进程在活动。让每一个进程在屏幕上显示一个字符:父进程显示字符a,两个子进程分别显示字符b和子符c。试观察、记录并分析屏幕上进程调度和并发执行的情况。这道题源程序清单和流程图要怎么写
时间: 2024-03-18 20:43:08 浏览: 27
以下是使用系统调用fork()创建两个子进程,分别显示字符'b'和字符'c',父进程显示字符'a'的程序的源代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
int main()
{
pid_t pid1, pid2;
pid1 = fork(); // 第一个子进程
if (pid1 < 0) { // 创建失败
perror("fork");
exit(1);
} else if (pid1 == 0) { // 子进程1
printf("b\n");
exit(0);
} else { // 父进程
pid2 = fork(); // 第二个子进程
if (pid2 < 0) { // 创建失败
perror("fork");
exit(1);
} else if (pid2 == 0) { // 子进程2
printf("c\n");
exit(0);
} else { // 父进程
printf("a\n");
exit(0);
}
}
return 0;
}
```
程序的流程图如下:
![使用fork()创建两个子进程的流程图](https://cdn.jsdelivr.net/gh/107z/PicBed/img/20211001154534.png)
注:圆角矩形表示进程,矩形表示执行过程。
在程序运行时,屏幕上会依次显示字符'a'、字符'b'、字符'c',这是因为父进程和两个子进程在执行时,操作系统会根据调度算法为它们分配时间片,使它们可以并发执行。操作系统根据进程的优先级和就绪队列中的进程个数,选择其中一个进程执行,当时间片用完或者进程主动调用阻塞函数时,操作系统会将进程切换到就绪队列中,然后选择下一个进程执行。
在本程序中,首先创建了一个子进程1,在子进程1中输出字符'b',然后父进程再创建了一个子进程2,在子进程2中输出字符'c',最后父进程自己输出字符'a'。由于进程调度是不确定的,因此屏幕上的字符顺序可能与代码中的顺序不同。
相关推荐
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![c](https://img-home.csdnimg.cn/images/20210720083646.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)