Linux操作系统实验 | 第二章 | 实验一 创建进程

Author : STU_Lary

1. 实验说明

​ 学会通过基本的Linux进程控制函数,由父进程创建子进程,并实现协同工作。创建两个进程,让子进程读取一个文件,父进程等待子进程读完文件后继续执行。

2. 解决方案

​ 进程协同工作就是要协调好两个或两个以上的进程,使之安排好先后次序并依次执行,可以用wait()或waitpid()函数来实现这一点。当只需要等待任一子进程运行结束时,可在父进程中调用wait()函数。若需要等待某一特定子进程的运行结果时,需调用waitpid( )函数,它是非阻塞型函数。

3. 实验步骤

  1. 打开终端创建.c文件
终端输入 touch [文件名]

在这里插入图片描述

创建成功

在这里插入图片描述

  1. 对代码进行编写

  1. 生成可执行文件
终端输入 gcc exp1.c -o exp1

在这里插入图片描述

生成成功

在这里插入图片描述

  1. 执行文件
终端输入  ./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;
}

猜你喜欢

转载自blog.csdn.net/weixin_53249168/article/details/128385242
今日推荐