(1) 编写一段程序,使用系统调用 fork( )创建两个子进程。 ⚫ 当此程序运行时,在系统中有一个父进程和两个子进程活动。 ⚫ 让每一个进程在屏幕上显示一个字符:父进程显示'a',子进程分别显示字符'b' 和字符'c'。 ⚫ 试观察记录屏幕上的显示结果,并分析原因。 (2) 修改上述程序,每一个进程循环显示一句话。 ⚫ 子进程显示'daughter ...'及'son ......',父进程显示 'parent ......'。 ⚫ 观察结果,分析原因。
时间: 2023-11-22 11:53:49 浏览: 80
进程的创建编写一段程序,使用系统调用fork()创建两个子进程。当此程序运行时,
5星 · 资源好评率100%
(1) 程序如下:
```c
#include <stdio.h>
#include <unistd.h>
int main() {
pid_t pid1, pid2;
pid1 = fork(); // 创建第一个子进程
if (pid1 < 0) { // 创建失败
printf("Error: fork() failed.\n");
return 1;
} else if (pid1 == 0) { // 子进程1
printf("b\n");
} else { // 父进程
pid2 = fork(); // 创建第二个子进程
if (pid2 < 0) { // 创建失败
printf("Error: fork() failed.\n");
return 1;
} else if (pid2 == 0) { // 子进程2
printf("c\n");
} else { // 父进程
printf("a\n");
}
}
return 0;
}
```
运行结果可能会有不同的顺序,取决于操作系统调度进程的顺序。父进程、子进程1 和子进程2 可能会交替地输出字符。
(2) 程序如下:
```c
#include <stdio.h>
#include <unistd.h>
int main() {
pid_t pid1, pid2;
pid1 = fork(); // 创建第一个子进程
if (pid1 < 0) { // 创建失败
printf("Error: fork() failed.\n");
return 1;
} else if (pid1 == 0) { // 子进程1
while (1) {
printf("daughter ...\n");
sleep(1);
printf("son ...\n");
sleep(1);
}
} else { // 父进程
while (1) {
printf("parent ...\n");
sleep(1);
}
}
return 0;
}
```
运行结果会不断地输出相应的字符串。子进程会循环输出 "daughter ..." 和 "son ...",父进程会循环输出 "parent ..."。原因是在各自的进程中,都会不断地执行循环语句,而每个进程都有自己的输出缓冲区,因此输出的字符串不会混合在一起。但是由于操作系统调度进程的不确定性,各个进程的输出顺序可能会交错在一起,导致输出结果有一定的随机性。
阅读全文