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

这篇具有很好参考价值的文章主要介绍了操作系统课程设计-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 进程控制,操作系统,linux,ubuntu

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

4.2 子进程执行新任务

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

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

图1.2 实验2-2步骤2文章来源地址https://www.toymoban.com/news/detail-802669.html

5 代码

5.1 进程的创建

#include<stdio.h>
#include<stdlib.h>
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<stdio.h>
#include<stdlib.h>
#include<sys/types.h>
#include<unistd.h>
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 进程控制的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 操作系统2:进程的描述与控制

    目录 1、什么是前驱图? 2、进程的定义和描述 (1)什么是进程? (2)进程的基本状态及转换 (3)挂起操作和进程状态的转换 3、进程管理中的数据结构 (1)进程控制块 PCB 的作用 (2)进程控制块 PCB 中的信息 (3)PCB 的组织方式 3、进程的控制 (1)操作系统内核 (2)

    2024年02月09日
    浏览(38)
  • 操作系统课程设计----模拟文件管理系统(c语言)

    1.采用高级语言编写程序模拟文件系统,文件系统采用多级目录结构,实现对文件和目录的创建、删除、重命名、变更权限、显示文件内容、修改文件内容等操作。 2.撰写课程设计报告。 编写程序模拟一个简单的文件系统,具体实验内容如下: (1)实现多级目录结构,而

    2024年01月21日
    浏览(49)
  • Linux操作系统篇:进程

    我们常见的计算机,如笔记本。我们不常见的计算机,如服务器,大部分都遵守冯诺依曼体系 为什么计算机要采用冯诺依曼体系呢? 在计算机出现之前有很多人都提出过计算机体系结构,但最终选择冯诺依曼是因为用比较少的钱就可以做出效率不错的计算机 截至目前,我们

    2024年03月18日
    浏览(46)
  • 【Linux】操作系统&&进程概念

    冯·诺依曼结构也称普林斯顿结构,是一种将程序指令存储器和数据存储器合并在一起的存储器结构 。数学家冯·诺依曼提出了计算机制造的三个基本原则,即采用二进制逻辑、程序存储执行以及计算机由五个部分组成( 运算器、控制器、存储器、输入设备、输出设备 ),这

    2024年01月16日
    浏览(48)
  • Linux--操作系统进程的状态

    【Linux】进程概念 —— 进程状态_linux d状态进程_Hello_World_213的博客-CSDN博客 新建: 字面意思,将你的task_struct创建出来并且还未入队列 运行: task_struct结构体在运行队列中排队,就叫做运行态 阻塞: 等待非CPU资源就绪,阻塞状态   挂起: 当内存不足的时候,OS通过适当的

    2024年02月15日
    浏览(51)
  • 软考:中级软件设计师:操作系统,进程管理,前趋图,进程同步互斥,PV操作,

    提示:系列被面试官问的问题,我自己当时不会,所以下来自己复盘一下,认真学习和总结,以应对未来更多的可能性 关于互联网大厂的笔试面试,都是需要细心准备的 (1)自己的科研经历, 科研内容 ,学习的相关领域知识,要熟悉熟透了 (2)自己的实习经历,做了 什

    2024年02月12日
    浏览(53)
  • 计算机操作系统【慕课版】习题答案(第2章进程的描述与控制)

    一:简答题 (1).什么是前趋图?试画出下面四条语句的前趋图. S1:a=x+y; S2:b=z+1; S3:c=a-b; S4:w=c+1; 答:前趋图(Precedence Graph)是一个有向无循环图,记为DAG(DirectedAcyclicGraph),用于描述进程之间执行的前后关系。 (2)什么是进程? OS中为什么要引入进程?它会产生什么样的

    2024年04月13日
    浏览(35)
  • 页面置换算法模拟实现-操作系统课程设计基于Java

    存储管理的主要功能之一是合理的分配空间,请求页式存储管理是一种常用的虚拟存储管理技术。在地址映射过程中,若在页表中发现所要访问的页面不在内存,则产生中断,当发生中断时,系统必须在内存选择一个页面移出内存,调用页面置换算法,以便为调入新的页面让

    2024年02月07日
    浏览(42)
  • 【Linux】操作系统与进程的概念

    目录 冯诺依曼体系 注意 为什么CPU不直接访问输入或输出设备? 跨主机间数据的传递 操作系统 管理 进程 描述进程 进程的查看和终止  bash 通过系统调用创建子进程 fork的辨析 🥖冯·诺依曼结构也称普林斯顿结构,是一种 将程序指令存储器和数据存储器合并在一起的存储器

    2024年01月18日
    浏览(46)
  • Linux操作系统——第五章 进程信号

          目录 信号概念 用kill -l命令可以察看系统定义的信号列表 信号处理常见方式概览 产生信号 1. 通过终端按键产生信号 2. 调用系统函数向进程发信号 3. 由软件条件产生信号 4. 硬件异常产生信号 阻塞信号 1. 信号其他相关常见概念 2. 在内核中的表示 3. sigset_t 4. 信号集操作

    2024年02月11日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包