操作系统课程设计-Linux 进程控制

目录

前言

1 实验题目

2 实验目的

3 实验内容

3.1 进程的创建

3.1.1 步骤

3.1.2 关键代码

3.2 子进程执行新任务

3.2.1 步骤

3.2.2 关键代码

4 实验结果与分析

4.1 进程的创建

4.2 子进程执行新任务

5 代码

5.1 进程的创建

5.2 子进程执行新任务


前言

         本实验为课设内容,博客内容为部分报告内容,仅为大家提供参考,请勿直接抄袭,另外,本次实验所用平台是Ubuntu 22.04 LTS,代码均是在终端进行编译的,不会的可以先了解怎么用终端编程,或者利用其他较为智能的开发环境进行编程

1 实验题目

        实验二 Linux 进程管理

2 实验目的

        通过进程的创建、撤销和运行加深对进程概念和进程并发执行的理解,明确进程和程序之间的区别。​​​

3 实验内容

3.1 进程的创建

3.1.1 步骤

        (1)步骤1:在目录实验2下用touch命令新建一个实验2-1.c文件,利用gedit命令打开编辑,复制清单3-1中的代码到实验2-1.c文件中并保存,利用gcc命令将其编译成可执行文件实验2-1。

        (2)步骤2:在命令行输入./实验2-1运行该程序,观察运行结果。

        (3)步骤3:多次运行程序,观察运行结果。

3.1.2 关键代码

	 if (x==0)
	 {
		sleep(rand() % 2);
		printf("a\n");
	 }
	 else
	 {
		sleep(rand() % 3);
		printf("b\n");
	 }
	 if(x==0)printf("cc\n");
	 else printf("fc\n");

3.2 子进程执行新任务

3.2.1 步骤

        (1)步骤1:在目录实验2下用touch命令新建一个实验2-2.c文件,利用gedit命令打开编辑,复制清单3-2中的代码到实验2-2.c文件中并保存,利用gcc命令将其编译成可执行文件实验2-2。

        (2)步骤2:在命令行输入./实验2-2运行该程序,观察运行结果。

3.2.2 关键代码

    pid_t pid;
	/*fork another process*/
	pid = fork();
	if(pid<0){
		fprintf(stderr,"Fork Failed");
		exit(-1);
	}else if(pid==0){
		execlp("/bin/ls","ls",NULL);
	}else{/*parent process*/
		/*parent wait for the child to complete*/
		wait(NULL);
		printf("Child Complete\n");
		exit(0);
	}

4 实验结果与分析

4.1 进程的创建

执行步骤2和3后,可以看到每次的结果不一定相同,可能是父进程先执行完毕,也可能是子进程先执行完毕,这说明进程的调度是不可预测的,即程序的执行不可在现,结果如下图所示:

操作系统课程设计-Linux 进程控制_第1张图片

图1.1 实验2-1步骤2和3

4.2 子进程执行新任务

执行步骤2后,会看到在终端上先输出了目录下的文件情况,再输出”Child Compelete”,说明父进程执行wait之后,会等待子进程执行完才会继续执行,结果如下图所示:

图1.2 实验2-2步骤2

5 代码

5.1 进程的创建

#include
#include
int main(void){
	int x;
	srand((unsigned)time(NULL)); 
	while((x=fork())==-1);
	if(x==0){
		sleep(rand()%2);
		printf("a\n");	
	}else{
		sleep(rand()%3);
		printf("b\n");	
	}
	if(x==0)printf("cc\n");
	else printf("fc\n");
}

5.2 子进程执行新任务

#include
#include
#include
#include
int main(void){
	pid_t pid;
	/*fork another process*/
	pid = fork();
	if(pid<0){
		fprintf(stderr,"Fork Failed");
		exit(-1);
	}else if(pid==0){
		execlp("/bin/ls","ls",NULL);
	}else{/*parent process*/
		/*parent wait for the child to complete*/
		wait(NULL);
		printf("Child Complete\n");
		exit(0);
	}
}

你可能感兴趣的:(操作系统,linux,ubuntu)