(1) 编写一段程序,使用系统调用 fork( )创建两个子进程。 ⚫ 当此程序运行时,在系统中有一个父进程和两个子进程活动。 ⚫ 让每一个进程在屏幕上显示一个字符:父进程显示'a',子进程分别显示字符'b' 和字符'c'。 ⚫ 试观察记录屏幕上的显示结果,并分析原因。 (2) 修改上述程序,每一个进程循环显示一句话。循环10次 ⚫ 子进程显示'daughter ...'及'son ......',父进程显示 'parent ......'。 ⚫ 观察结果,分析原因。
时间: 2023-11-22 18:53:56 浏览: 208
汇编写的Dos操作系统的源码.rar_DOS_DOS 源_fork系统_操作系统 汇编_汇编写系统
(1) 代码如下:
```c
#include <stdio.h>
#include <unistd.h>
int main(){
pid_t pid1, pid2;
pid1 = fork();
if(pid1 < 0){
printf("Error: fork process failed.\n");
return 1;
}
else if(pid1 == 0){ // 子进程1
printf("b\n");
}
else{
pid2 = fork();
if(pid2 < 0){
printf("Error: fork process failed.\n");
return 1;
}
else if(pid2 == 0){ // 子进程2
printf("c\n");
}
else{ // 父进程
printf("a\n");
}
}
return 0;
}
```
运行结果可能会有不同,由于不同进程的执行顺序不确定。但是每次运行结果都只包含一个'a',一个'b'和一个'c',因为每个进程都在独立的地址空间中运行,彼此之间不会共享变量和其他资源,因此它们的输出不会相互干扰。
(2) 代码如下:
```c
#include <stdio.h>
#include <unistd.h>
int main(){
pid_t pid1, pid2;
pid1 = fork();
if(pid1 < 0){
printf("Error: fork process failed.\n");
return 1;
}
else if(pid1 == 0){ // 子进程1
for(int i = 0; i < 10; i++){
printf("daughter %d\n", i+1);
}
}
else{
pid2 = fork();
if(pid2 < 0){
printf("Error: fork process failed.\n");
return 1;
}
else if(pid2 == 0){ // 子进程2
for(int i = 0; i < 10; i++){
printf("son %d\n", i+1);
}
}
else{ // 父进程
for(int i = 0; i < 10; i++){
printf("parent %d\n", i+1);
}
}
}
return 0;
}
```
运行结果可能会有不同,由于不同进程的执行顺序不确定。但是每次运行结果都包含10次循环输出,每个进程都独立地输出了各自的内容,没有相互干扰。
阅读全文