操作系统——Linux 进程控制

news2024/11/25 8:16:39

、实验题目

Linux 进程控制

二、实验目的

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

三、实验内容(实验原理/运用的理论知识、算法/程序流程图、步骤和方法、关键代码)

(1)任务一:进程的创建

任务要求:编写一段程序,使用系统调用 fork()创建一个子进程。当此程序运行时,在系统

中有一个父进程和一个子进程活动。让每一个进程在屏幕上分别显示字符:父进程显示字符“b”;

子进程显示字符“a”,另外父子进程都显示字符“c”。

步骤 1:使用 vi 或 gedit 新建一个 fork_demo.c 程序,然后拷贝清单 3-1 中的程序,使用 cc 或者

gcc 编译成可执行文件 fork_demo。例如,可以使用 gcc –o fork_demo fork_demo.c 完成编译。

步骤 2:在命令行输入./fork_demo 运行该程序。

步骤 3:多次运行程序,观察屏幕上的显示结果,并分析多次运行为什么会出现不同的结果。

(2)任务二:子进程执行新任务

任务要求:编写一段程序,使用系统调用 fork()创建一个子进程。子进程通过系统调用 exec

更换自己原有的执行代码,转去执行 Linux 命令/bin/ls (显示当前目录的列表),然后调用 exit()函

数结束。父进程则调用 waitpid()等待子进程结束,并在子进程结束后显示子进程的标识符,然后正

常结束。程序执行过程如图 3-1 所示。

步骤 1:使用 vi 或 gedit 新建一个 exec_demo.c 程序,然后拷贝清单 3-2 中的程序(该程序的执

行如图 3-1 所示),使用 cc 或者 gcc 编译成可执行文件 exec_demo。例如,可以使用 gcc –o exec_demo

exec_demo.c 完成编译。

步骤 2:在命令行输入./exec_demo 运行该程序。

步骤 3:观察该程序在屏幕上的显示结果,并分析。

图 3-1 exec_demo.c 程序的执行过程

四、实验结果与分析

实验一:

这段程序通过调用fork()函数创建一个子进程,并在父子进程中分别打印字符"a"和字符"b",最后在两个进程中都打印字符"c"。

无论是哪种输出,都符合多进程并发执行的特点。

分析:

srand((unsigned)time(NULL))用于初始化随机数生成器。

fork()函数用于创建子进程。在父进程中,fork()返回子进程的进程ID;在子进程中,fork()返回0。如果创建进程失败,fork()返回-1。

sleep(rand() % 2)和sleep(rand() % 3)用于让进程随机等待一段时间。

printf函数用于打印字符。

父进程和子进程都会执行最后一行的printf("c")。

实验二:

这段程序通过调用fork()函数创建一个子进程,并在子进程中执行execlp("/bin/ls","ls",NULL)命令,execlp 函数通过指定的文件路径 file 来加载并执行一个新的程序。第一个参数 file 是要执行的可执行文件的路径。在这种情况下,/bin/ls 表示要执行的可执行文件是 /bin 目录下的 ls 程序。即调用ls命令来列出当前目录的文件和文件夹。而第二个参数“ls”是这个运行程序的命名。父进程会等待子进程执行完毕,然后打印"Child Complete"。

程序运行时,输出可能类似于以下内容:

分析:

fork()函数用于创建子进程。在父进程中,fork()返回子进程的进程ID;在子进程中,fork()返回0。如果创建进程失败,fork()返回-1。

execlp("/bin/ls","ls",NULL)用于在子进程中执行ls命令。

父进程使用wait(NULL)函数等待子进程执行完毕,以确保在子进程完成之前不会退出。

子进程通过execlp()函数执行ls命令,并将ls的输出打印到标准输出。

父进程在子进程执行完毕后,打印"Child Complete"。

五、小结与心得体会

1.进程创建:使用fork()函数可以创建一个新的子进程,子进程是父进程的副本。子进程从fork()函数返回的地方开始执行,可以继续执行父进程的代码或执行新的任务。

2.并发执行:在多进程环境中,父进程和子进程可以并发执行,彼此独立运行。操作系统通过进程调度算法来决定进程的执行顺序和时间片分配。

3.随机性:在实验中,使用rand()和srand()函数生成随机数,通过随机等待时间模拟进程的不确定性和并发性。这样可以观察到不同进程的执行顺序可能会有所变化。

4.子进程的新任务:在清单2-2中,展示了子进程如何执行新的任务。通过调用execlp()函数,子进程可以运行其他可执行程序,实现不同的功能。父进程可以通过等待子进程的完成来协同它们的执行顺序。

5.父子进程通信:在这两个实验中,并没有直接的父子进程之间的通信。它们是通过操作系统的进程管理机制来实现并发执行和等待子进程完成的。

6.实验结果的不确定性:由于进程调度和随机性的影响,实验结果可能会有多种可能性。同样的程序可能会产生不同的输出,这是多进程环境下的特点。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/684852.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

开源网安S-SDLC解决方案,为银行打造主动防御的安全体系

​某银行是全国上市最早的一批股份制商业银行,总部位于深圳,在全国拥有上百家分行、上千家营业机构,资产总额达数千亿元。近年来,该银行围绕数据化、智能化、生态化,全力打造“数字银行”,助力建设“数字中…

第十六届CISCN复现----MISC

1.被加密的生产流量 下载附件,发现是一个文件名为modus的压缩包,解压后是一个pcap文件,用wireshark打开 文件名modus,已经提示了工控流量,很多情况下都是和TCP协议结合起来的 工控CTF之协议分析1——Modbus_ctf modb…

基于java+swing+mysql学生信息管理系统V2.0

基于javaswingmysql学生信息管理系统V2.0 一、系统介绍二、功能展示1.项目骨架2.数据库表3.项目内容4.登陆5.学生信息查询6、学生信息添加7、学生信息修改8、学生信息删除 四、其它1.其他系统实现五.获取源码 一、系统介绍 项目类型:Java SE项目(awtswi…

Gorm Many To Many

写cmdb的时候要去做一些软件资源的落库,发布要使用到的应用属性。应用有哪些属性? 应用有它的type类型,是api还是admin,还是job或者task。它的语言是go java.....,它的own也就是属于哪个开发的,这是它的属…

设备管理模块实现

文章目录 1 .导航树模块的实现2. 查询定位功能的实现3. 资源管理功能的实现4. 电缆段入沟功能实现 1 .导航树模块的实现 导航树的各节点是通过Ajax 技术异步加载的,系统初始化时导航树只会加载初始的城市节点,用户根据自身需要选择相应的父节点加载其逻…

Flink安装与编程实践

系列文章目录 Ubuntu常见基本问题 Hadoop3.1.3安装(单机、伪分布) Hadoop集群搭建 HBase2.2.2安装(单机、伪分布) Zookeeper集群搭建 HBase集群搭建 Spark安装和编程实践(Spark2.4.0) Spark集群搭建 文章目…

mongoDB相关知识

目录 常用操作删除数据库 启动问题集如何远程访问mongDB数据库由于widows安全策略,linux访问不到windows的mongDB 常用操作 删除数据库 windows下mongDB通过下面命令行进入 D:\mongodb\mongodb-win32-x86_64-2008plus-ssl-3.6.23-8-gc2609ed3ed\bin>mongod.exe…

Unity开发前的一些建议1_设置脚本的编码格式,设置IDE的编码格式

Unity开发前的一些建议1_设置脚本的编码格式,设置IDE的编码格式 乱码之后是是不可以撤回的哦。 这么做的理由,Unity右侧的Inspector面板看代码是UTF-8格式的。可以在Inspector中速览代码,且如果修改IDE,UTF-8比其他编码格式用的…

K8S复习

本文原文出自本人自己复习时整理,原文非常系统,建议拜师#yyds干货盘点# 手把手教你玩转 Kubernete 集群搭建(03)_wzlinux的博客-CSDN博客 1.docker的优势 在某一段时期内,大家一提到 Docker,就和容器等价起来,认为 Doc…

【架构】后端服务架构高性能设计方法

文章目录 前言1、无锁化1.1、串行无锁1.2、结构无锁 2、零拷贝2.1、内存映射2.2、零拷贝 3、序列化3.1、分类3.2、性能指标3.3、选型考量 4、池子化4.1、内存池4.2、线程池4.3、连接池4.4、对象池 5、并发化5.1、请求并发5.2、冗余请求 6、异步化6.1、调用异步化6.2、流程异步化…

【跟晓月学数据库】使用MySQLdump 对数据导入导出

前言 大家好,我是沐风晓月,今天给大家介绍MySQLdump的数据导出导入,希望对你有用。 🏠个人主页:我是沐风晓月 🧑个人简介:大家好,我是沐风晓月,阿里云社区专家博主&…

vue3+antd-design-vue+vite项目总结

代码热更新能力失效,每次都需要手动刷新,开发体验极差 1、先看看是否开启了热更新 2、再看看引入模块文件名是否正确。当前的项目部分人可以更新,部分不能,所以和1没什么关系,网上搜索发现vite对文件名大小写十分敏感&…

2-3查找树

2-3查找树 为了保证查找树的平衡性,我们需要一些灵活性,因此在这里我们允许树中的一个结点保存多个键。确切的说,我 们将一棵标准的二叉查找树中的结点称为2-结点(含有一个键和两条链),而现在我们引入3-结点,它含有两…

Java版本企业招投标采购管理系统源码 +支持二开+spring cloud

一、立项管理 1、招标立项申请 功能点:招标类项目立项申请入口,用户可以保存为草稿,提交。 2、非招标立项申请 功能点:非招标立项申请入口、用户可以保存为草稿、提交。 3、采购立项列表 功能点:对草稿进行编辑&#x…

如何访问NetApp E系列存储的CLI命令行

NetApp存储的E系列(e-series)是收购LSI存储而来的,所以这个产品的install base,也就是安装量其实是很大的,因为早期LSI的商业模式就是OEM,给很多的IT公司做过OEM,比较典型的就是IBM的早期的DS存…

我想搭建一个商城?有哪些流程?

近年来,我国电子商务发展迅速。淘宝、京东、亚马逊等一大批电子商务巨头受到越来越多消费者的青睐。互联网普及率大大提高,消费者也逐渐形成了网上购物的习惯。在支付体验、物流服务和售后服务不断提升的过程中,越来越多的消费者依赖网络购物…

保险信创 数据领航|GBASE南大通用亮相2023年保险行业信息技术应用创新大会

2023年6月,2023年保险行业信息技术应用创新大会在京召开,会议重点围绕保险核心业务系统的改造及终端的选型和应用展开探讨学习,分享行业成功实践经验,着力解决行业信创发展痛点难点,助力行业加快信创生态建设&#xff…

Linux用户权限和认证

linux公钥登录 useradd test -m -g root创建名为test的用户,生成相应目录,同时加入root组passwd test重置密码 分配test用户sudo权限,sudo vim etc/sudoers 编辑SSH文件 vim /etc/ssh/sshd_config PermitRootLoginyes改为no关闭ROOT登录…

基于全卷积神经网络(FCN)实现图像分割

目录 1、作者介绍2、网络及数据集介绍2.1 FCN算法2.2 VOC_2012数据集2.3 制作自己的语义分割数据集2.3.1 标注方式一:多边形标注2.3.1.1 labelMe安装与数据标注2.3.1.2 数据格式转换2.3.1.3 数据集分类 2.3.2 标注方式二:像素级涂抹 3、基于RESNet50骨干…

Linux 学习记录39(C高级篇)

Linux 学习记录39(C高级篇) 本文目录 Linux 学习记录39(C高级篇)一、gdb调试工具1. gdb工具的使用 二、枚举类型 enum1. 定义 三、Makefile1. 什么是makefile2. 什么是Make3. Make用途4. Makefile的工作过程(1. Makefile分步编译的目的 5. Makefile的语法规则6. Makefile变量的…