一、实验目的
熟悉操作系统程序接口的使用。 要装好虚拟机哦,这里用的是 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 阻塞后,打开任务管理器查看进程号,发现确实有三个进程【好耶】