# 一、实验目的
熟悉操作系统程序接口的使用。
要装好虚拟机哦,这里用的是 deepin
# 二、实验内容
编写一段程序,使用系统调用 fork ( ) 创建两个子进程。当此程序运行时,在系统中有一个父进程和两个子进程活动。让每一个进程在屏幕上显示一个字符:父进程显示 'a',子进程分别显示字符 'b' 和字符 'c'。
# 三、实验代码
unistd.h 是 Linux/Unix 系统中内置头文件,包含了许多系统服务的函数原型,例如 read 函数、write 函数和 getpid 函数等。其作用相当于 windows 操作系统的 "windows.h",是操作系统为用户提供的统一 API 接口,方便调用系统提供的一些服务。
fork 函数在当前进程调用后,会产生一个子进程并返回子进程的 pid,在子进程中,fork 返回的值是 0,因此,可以写得测试代码如下
#include <iostream> | |
#include <unistd.h> | |
using namespace std; | |
int main() { | |
pid_t pid = 5; | |
int flag = 1; | |
pid = fork(); | |
if(pid < 0) | |
cout << "Error in fork!" << endl; | |
else if (pid == 0) cout << "I am Child1!Pid is " << pid << ". content:b" << endl; | |
else { | |
cout << "I am Parent!Pid is " << pid << ". content:a" << endl; | |
pid_t pid2 = fork(); | |
if (pid2 == 0) cout << "I am Child2!Pid is " << pid2 << ". content:c" << endl; | |
} | |
cout << "over." << endl; | |
return 0; | |
} |
# 四、运行结果截图
第一次运行
第二次运行
可以看出三个进程执行互不干预,结果具有不可再现性~
加了一行 IO 阻塞后,打开任务管理器查看进程号,发现确实有三个进程【好耶】