Author : STU_Lary
1. 实验说明
学会通过基本的Linux进程控制函数,由父进程创建子进程,并实现协同工作。创建两个进程,让子进程读取一个文件,父进程等待子进程读完文件后继续执行。
2. 解决方案
进程协同工作就是要协调好两个或两个以上的进程,使之安排好先后次序并依次执行,可以用wait()或waitpid()函数来实现这一点。当只需要等待任一子进程运行结束时,可在父进程中调用wait()函数。若需要等待某一特定子进程的运行结果时,需调用waitpid( )函数,它是非阻塞型函数。
3. 实验步骤
- 打开终端创建.c文件
终端输入 touch [文件名]
创建成功
- 对代码进行编写
- 生成可执行文件
终端输入 gcc exp1.c -o exp1
生成成功
- 执行文件
终端输入 ./exp1
输出结果如下图
4. 实验解释
当fork()调用成功后,父子进程完成各自的任务,但当父进程的工作告一段落,需要用到子进程的结果时,它就停下来调用wait(),一直等到子进程运行结束,然后利用子进程的结果继续执行,这样就圆满地解决了父子进程间的协同工作问题
5. 实验代码
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <stdlib.h>
#include <wait.h>
int main(void)
{
int pid;
//创建子进程
pid=fork();
/*
fork函数返回值:
在父进程中,fork返回新创建子进程的进程ID;
在子进程中,fork返回0;
如果出现错误,fork返回一个负值
在语句fpid=fork()之前,只有一个进程在执行这段代码,但在这条语句之后,就变成两个进程在执行了,这两个进程的几乎完全相同,将要执行的下一条语句都是if(fpid<0)
*/
//调用失败,函数返回-1
if(pid<0){
printf("error\n");
}
else if(pid==0){
printf("子进程\n");
}
else{
wait(NULL);//等待
printf("父进程\n");
}
exit(0);
return 0;
}