Linux实验----进程管理 实验三

linux----8--9--父进程等待子进程的退出 阅读详情

一 实验题目:

进程管理实验

二 实验目的

加深对进程概念的理解,明确进程与程序的区别;进一步认识并发执行的实质掌握进程管理、进程通信

三 实验内容

1、进程创建
2、进程控制
3、进程的管道通信
4、父进程从终端读取要执行的命令,并交给子进程执行。父进程等待子进程结束,并打印子进程的返回值。

四 实验步骤

1、进程创建

编写一段程序,使用系统调用fork()创建两个子进程。当此程序运行时,在系统中有一个父进程和两个子进程活动。让每一个进程在屏幕上显示一个字符:父进程显示“a“;子进程分别显示字符”b“和字符“c”。观察记录屏幕上的显示结果,并分析原因。

2、进程控制

修改已编写的程序,将每一个进程输出一个字符改为每一个进程输出一句话,再观察程序执行时屏幕上出现的现象,并分析原因。

3、进程的管道通信

编写程序实现进程的管道通信。使用系统调用pipe()建立一个管道,二个子进程P1和P2分别向管道各写一句话:
Child 1 is sending a message!
Child 2 is sending a message!
父进程从管道中读出二个来自子进程的信息并显示(要求先接收P1,再接收P2)。
管道是进程间通信中最古老的方式,它包括无名管道和有名管道两种,前者用于父进程和子进程间的通信,后者用于运行于同一台机器上的任意两个进程间的通信。
无名管道由pipe()函数创建:

 #include <unistd.h>
 int pipe(int filedis[2]);

参数filedis返回两个文件描述符:filedes[0]为读而打开,filedes[1]为写而打开。filedes[1]的输出是filedes[0]的输入。下面的例子示范了如何在
父进程和子进程间实现通信。

4、父进程从终端读取要执行的命令,并交给子进程执行。父进程等待子进程结束,并打印子进程的返回值。
提示:从终端读取要执行的命令可用fgets()实现。

五、实验结果

1在这里插入图片描述
2
在这里插入图片描述
3
在这里插入图片描述
4
在这里插入图片描述

代码实现

fork.c

#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<sys/types.h>
int main(int argc, char *argv[])
{
	pid_t pid1,pid2,ppid;
	printf("before fork\n");
	pid1=fork();
		if(pid1==0)
		{
			printf(" b\n");
		}
		if(pid1<0)
		{
			printf("fork\n");
		}
		else
		{
			printf("  a\n");
		}
	pid2=fork();

		if(pid2==0)
		{
			printf(" c\n");
		}
		else
		{
			printf("fork\n");
		}
return 0;
}

fork1.c

#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<sys/types.h>
int main(int argc, char *argv[])
{
	pid_t pid1,pid2,ppid;
	printf("bofore fork\n");
	pid1=fork();
		if(pid1==0)
		{
			printf("successd this is a son process b\n");
		}
		if(pid1<0)
		{
			printf("fork\n");
		}
		else
		{
			printf("this is father process  a\n");
		}
	pid2=fork();
		if(pid2==0)
		{
			printf("successd this is a son process c\n");
		}
		else
		{
			printf("fork\n");
		}
return 0;
}

3_write.c

#include<unistd.h>
#include<sys/wait.h>
#include<string.h>
#include<stdio.h>
#include<stdlib.h>
#include<sys/types.h>
int main(int argc,char *argv[])
{
        int fd_pipe[2];
        if(pipe(fd_pipe)<0)
        {
                printf("pipe\n");

        }
        else
        {
                printf("pipe is  success\n");
        }

        pid_t pid1;
        pid1=fork();
       	char buf[50]="Child 1 is sending a message!\n";
	printf("before fork\n");
         if(pid1==0)
	{
                printf(" this is son process b\n");
         write(fd_pipe[1],buf,strlen(buf));
	}
                wait(NULL);
                memset(buf,0,strlen(buf));
                read(fd_pipe[0],buf,sizeof(buf));
                printf("father process  a buf=%s\n",buf);
        

	 pid_t pid2;
        pid2=fork();
        char buf2[50]=" Child 2 is sending a message ! \n";
       printf("before fork\n");
        
                        
		if(pid2==0)
		{		
			printf(" this is son process c\n");
        	 write(fd_pipe[1],buf2,strlen(buf2));
        
        
        
                wait(NULL);
                memset(buf2,0,strlen(buf2));
                read(fd_pipe[0],buf2,sizeof(buf2));
                printf("father process  a  buf= %s \n",buf2);
        
	
        return 0;
}
}

六 总结

1.Fork函数创建进程,还要知道进程的分类,及两个等待函数wait waitpid
2.Exit 退出函数
3.知道管道的特点

  • 半双工,同一时刻只能住在一个方向流动
  • 管道只存于内存中
  • 管道没有名字 只能用在具有公共祖先的进程间
  • 管道所传送的数据是无格式的
  • 管道只能从一段写入,另一端读出
Linux系统编程(二)进程 本文介绍了进程的基本概念和特点。进程是程序的执行实例,包含代码、数据和系统资源。进程地址空间划分为栈、堆、全局区、文本常量区和代码段。进程具有独立性、资源拥有和状态切换的特点。创建进程有fork和vfork两种方式:fork会复制父进程地址空间,父子进程独立运行;vfork共享地址空间,且父进程需等待子进程退出。进程退出可使用exit(0)或_exit(0)两种方式。文章通过代码示例直观展示了不同创建方式下进程的运行机制和差异。 阅读详情

相关推荐

【Linux操作系统】实验三

本实验的主要任务是对用户和组群进行管理,使用 su 和 sudo 命令以及管理文件和目录的权限。结合文件权限与用户和组群的设置,理解文件的3 种用户身份及权限对于文件和目录的不同含义。 (1) 掌握文件与用户和组群的基本概念及关系。 ‎ ‍(2) 掌握修改文件的所有者和属组的方法。 ‎ ‍(3) 掌握 su 和 sudo 命令的使用方法。 ‎ ‍(4) 理解文件和目录的3种权限的含义。 ‎ ‍(5) 掌握如何使用数字表示法、文字表示法修改文件和目录的权限。 ‎ ‍(6) 理解 umask 影响文件

m0_51011320的博客 1327

Linux下的C编程实战

Linux下的C编程实战(一) ――开发平台搭建 1.引言 Linux操作系统在服务器领域的应用和普及已经有较长的历史,这源于它的开源特点以及其超越Windows的安全性和稳定性。而近年来, Linux操作系统在嵌入式系统领域的延伸也可谓是如日中天,许多版本的嵌入式Linux系统被开发出来,如ucLinux、RTLinux、ARM-Linux等等。 在嵌入式操作系统...

weixin_30608503的博客 446

从硬件异常到代码救赎:RH850内存访问错误(MAE)的深层诊断与艺术

本文深入探讨瑞萨RH850微控制器的内存访问错误(MAE)诊断与解决方法。针对程序跑飞和Flash Driver交互中的潜在陷阱,提供系统性硬件异常分析框架和防御性编程实践,帮助嵌入式开发者从底层机制到代码层面有效预防和修复MAE问题,提升系统稳定性。

pytorch8learner的博客 195

Linux(2)

fork和exec函数fork( )用来创建一个新的进程,该进程几乎是当前进程的一个完全拷贝;函数族exec( )用来启动另外的进程以取代当前运行的进程。Linux的进程控制和传统的Unix进程控制基本一致,只在一些细节的地方有些区别,例如在Linux系统中调用vfork和fork完全相同,而在有些版本的Unix系统中,vfork调用有不同的功能。由于这些差别几乎不影响我们大多数的编程,在这里我们不

jinzhao1993的博客 791

告别GitHub!手把手教你用Gitblit在Windows 10上搭建私人局域网Git服务器(附SourceTree配置)

本文详细介绍了如何在Windows 10环境下使用Gitblit搭建私有Git服务器,实现局域网内高效代码协作。通过轻量级的Gitblit解决方案,开发者可以享受数据完全自主、离线可用性和局域网高速访问等优势。文章包含从环境准备、安装部署到SourceTree配置的全流程指南,特别适合金融、医疗等敏感行业团队使用。

weixin_30430169的博客 280

OpenGL计算着色器工作组设置测试

先看看不同的显卡上工作组的数量情况。 glGetIntegeri_v(GL_MAX_COMPUTE_WORK_GROUP_COUNT, 0, data); glGetIntegeri_v(GL_MAX_COMPUTE_WORK_GROUP_COUNT, 1, data + 1); glGetIntegeri_v(GL_MAX_COMPUTE_WORK_GROUP_COUNT, 2, data...

qq_26328385的博客 1484

linux实验三进程管理,实验三Linux系统的进程管理

实验三Linux系统的进程管理一、实验目的1.掌握进程管理的相关命令;2.理解Linux进程管理的实质。二、项目背景在 Windows 2000/2003系统下,安装VMWare Workstation,并安装了RedHat Linux.三、实验内容1、前期准备打开系统,选择“主菜单”→“系统工具”→“终端”命令进入命令行环境,2、1)ps功能:用于查看进程状态。使用该命令可以确定有哪些进程正在运...

weixin_39637256的博客 539

Jenkins中文显示不全?三步搞定Locale插件+汉化包的正确安装姿势

本文针对Jenkins界面中文显示不全问题,提供从原理到实战的深度解决方案。文章详细解析了Locale插件与中文语言包的核心机制,并分步指导如何通过配置JVM环境、正确安装插件及执行深度排查,彻底解决汉化顽疾,实现Jenkins界面的完美中文显示。

weixin_42611310的博客 259

杭电(杭州电子科技大学)操作系统实验三:Linux进程管理

目录前言实验内容实验一实验二实验三实验四 前言 由于是小组实验,我分配被问到的是实验三的sender线程的实现,因此只记录了这一块内容可能问到的问题,不过代码里的注释很详尽了,可以自行观看。 实验内容 (1)实现一个模拟的shell (2)实现一个管道通信程序 (3)利用Linux的消息队列通信机制实现两个线程间的通信 (4)利用Linux的共享内存通信机制实现两个进程间的通信 实验一 可能问到的问题: ①execl()函数的参数以及其实现的原理 ②fork()函数 #include <uni

weixin_43614380的博客 1万+

iTerm2+oh-my-zsh最全配置

iTerm2+oh-my-zsh最全配置安装前先看效果图一.安装[iTem2](https://iterm2.com/)二.安装[oh-my-zsh](https://ohmyz.sh/)三.安装[Powerline](https://powerline.readthedocs.io/en/latest/installation.html)四.安装 [Meslo](https://github.com/powerline/fonts) 字体库五.安装agnoster主题六.安装语法高亮七.安装代码补全插件八

xinximo的博客 2609

销售预测的方法与模型(三)丨安全库存与再订货(补货)

较高的 Z 值对应较高的服务水平(例如,服务水平 99% 对应 Z 值 2.33),意味着企业希望更低的缺货风险,因此需要更高的安全库存。在再订货点的管理中,考虑到供应商交货的不确定性,通常需要结合安全库存,以防止在交货期间库存用尽。要对L开根号,根号L表示交货周期越长,企业需要的安全库存越多,因为在较长的供应期内,需求波动的累积效应更明显。举例:供应商的交期服从标准差为2件/天的正态分布,顾客需求为50件/天的正态分布,若要客户服务水平达到 90%,安全库存量应该是多少?下面介绍几种核心的模型与公式。

weixin_45675709的博客 1534

linux实验三进程管理,linux实验三软件包管理与进程管理

淮海工学院计算机工程学院实验报告书课程名:《网络操作系统》题 目: 软件包管理与进程管理班 级: 网络132学 号:姓 名:评语:成绩: 指导教师:批阅时间: 年 月 日一、目的与要求1、掌握linux软件包管理方法。2、掌握RPM命令的使用。3、熟悉图形模式下软件管理工具的使用。4、掌握常用进程管理...

weixin_28835551的博客 1323

泛微OA与金蝶云星空审批流程对接实战:从报销单到采购合同的完整指南

本文详细介绍了泛微OA与金蝶云星空审批流程的深度集成方案,涵盖从报销单到采购合同的完整对接指南。通过API层面的无缝连接,实现流程自动化、数据同源和权限联动,显著提升企业业务效率。文章还提供了环境配置、数据映射、接口安全等实用技巧,助力企业轻松完成系统对接。

weixin_29268637的博客 245

实验三linux服务与进程管理,认识Linux的进程管理

认识Linux的进程管理Tag内容描述:1、1,1.5 Linux操作系统概述,1.5.1 Linux的起源的历史,Linux是Internet的产物,Linus利用MINIX开发了两个进程用以写/读数据,并以此为契机添加硬盘驱动程序、小型文件系统以至形成了Linux的雏型 Linus将这个雏型放在校园网上征求大家的意见。Linux从一开始就是一个以编程爱好为主的系统。,最初是由芬兰的赫尔辛基大学...

weixin_33352628的博客 423

半导体器件仿真:双极型晶体管仿真_15.双极型晶体管的高级仿真技术

双极型晶体管(Bipolar Junction Transistor, BJT)是一种重要的半导体器件,广泛应用于放大、开关和调制等电路中。随着半导体技术的发展,对BJT的仿真要求也越来越高。本节将详细介绍双极型晶体管的高级仿真技术,包括器件模型的选择、仿真参数的优化、温度效应的考虑以及噪声分析等。

2401_87715305的博客 1241

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

linux进程管理实验报告,操作系统-实验三-进程管理-实验报告

计算机与信息工程学院实验报告姓名 专业 课程 软件工程 操作系统 学号 年级 主讲教师 2019年10月23日 辅导教师 党兰学 2017级 党兰学 实验时间(年月日时) 实验地点 计算机学院201机房 实验题目 进程管理 实验目的 1. 加深对进程概念的理解,明确进程和程序的区别; 2. 进一步认识并发执行的实质; 3. 了解父进程和子进程之间的关系; 4. 查看进程管理命令。 实验环境(...

weixin_39675728的博客 2047

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

实验报告三-Linux系统多用户管理、进程管理

解释:特殊权限SUID的作用:给passwd命令设置SUID,则每个用户执行passwd命令都会拥有和passwd命令对应的用户的权限,即以文件所有者的身份执行。2、掌握Linux系统的多用户管理命令useradd,usermod,userdel,passwd,groupadd,groupdel,gpasswd,groups,newgrp等命令;1、理解多用户管理是Linux系统非常重要的特征,理解多用户在Linux系统中是如何体现的;5、掌握Linux系统进程管理命令ps,kill等,top工具的使用。

weixin_59436900的博客 1474

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

头歌——实验三 Linux之进程管理二

通过提示,在右侧编辑器中补充代码,完成在指定文件中添加内容,具体要求如下:创建进程;父进程向文件中添加hello 和 world!;子进程向文件中添加hello 和 welcome!;只需修改文件内容即可,平台将为你输出文件内容。提示:fork()函数的返回值为0时则为子进程。

Q0511M的博客 1180

操作系统实验三-linux进程管理

操作系统实验三

weixin_56633543的博客 1763

实验三linux服务与进程管理,实验五 Linux进程管理和打印管理

实验五Linux进程管理和打印管理一. 一.实验目的:1.1.进行系统进程管理。2.2.配置Linux下的打印服务器,实现局域网内的Linux和Windows客户端共享使用服务器的打印机。二. 二.实验内容:1.1.进程状态查看;2.2.控制系统中运行的进程;3.3.安排一次性和周期性自动执行的后台进程;4.4.配置Linux打印服务器;5.5.配置Linux客户端;6.6.配置Windows客户...

weixin_29746595的博客 294

实验三:Linux进程管理(HDU)

2.设计内容 把下面的几个网址的内容看懂,关于Linux的通信机制就会有个基本的了解了,后面的这几个代码也应该可以看得懂了。 管道通信:https://blog.youkuaiyun.com/ljianhui/article/details/10168031 消息队列通信:https://blog.youkuaiyun.com/ljianhui/article/details/10287879 共享内存通信:https...

weixin_30745553的博客 2032

实验三linux服务与进程管理,Linux 进程与服务管理1

实验1: inittab配置调整实验环境在虚拟机Linux系统下实验目标注在Linux虚拟机环境中由于系统是装在虚拟机中而你的寄生系统是Windows因此在虚拟机中你需要用到Ctrl+Alt+Insert代替Ctrl+Alt+Del。禁用TTY控制台的Ctrl+Alt+Del热键重启init q 可立即生效以用户lily登入tty3测试Ctrl+Alt+Del热键已失效配置关闭tty4-tty6控...

weixin_28687415的博客 250

linux进程管理模拟实验报告,操作系统-实验三-进程管理-实验报告

计算机与信息工程学院实验报告一、实验内容1.练习在shell环境下编译执行程序(注意:①在vi编辑器中编写名为sample.c的c语言源程序②用linux自带的编译器gcc编译程序,例如:gcc –o test sample.c③编译后生成名为test.out的可执行文件;④最后执行分析结果;命令为:./test)注意:linux自带的编译程序gcc的语法是:gcc –o 目标程序名源程序名,例如...

weixin_29745919的博客 974

linuxpv操作实验_操作系统实验三:Linux进程管理及其扩展

一、实验内容1.阅读并分析Linux内核源代码,了解进程控制块、进程队列等数据结构;2.实现一个系统调用,使得可以根据指定的参数隐藏进程,使用户无法使用ps或top观察到进程状态。具体要求如下:(1)实现系统调用int hide(pid_t pid, int on),在进程pid有效的前提下,如果on置1,进程被隐藏,用户无法通过ps或top观察到进程状态;如果on置0且此前为隐藏状态,则恢复正常...

weixin_39989222的博客 1205

实验三linux服务与进程管理,学习Linux实验总结二(进程与服务管理)

进程与服务管理挂载系统光盘搭建本地yum源1.mkdir /mnt/cdrom2. mount -o loop /dev/sr0 /mnt/cdrom 或 mount -o loop /dev/cdrom /mnt/cdrom 一般是后者3.vi/etc/yum.repos.d/rhel-source.repo[rhel-source]name=Red Hat Enterprise Linux 6...

weixin_30340269的博客 998

操作系统实验报告linux进程管理,计算机操作系统实验报告三Linux进程基本管理.doc...

GDOU-B-11-112广东海洋大学学生实验报告书(学生用表)GDOU-B-11-112实验名称Linux进程基本管理课程名称计算机操作系统课程号学院(系)专业统班级学生姓名学号实验地点实验日期实验三 Linux进程基本管理一、实验目的通过在Linux环境下对进程的基本操作,感性认识进程并区分与程序的区别。二、实验工具一台至少具有256MB内存的计算机,以及具有Linux操作系统。预备知识常见对...

weixin_36269385的博客 694
上一篇: Linux实验---多文件编程Makefile实验二
下一篇: Linux实验 ---- 生产者和消费者问题 实验四
Execution_
博客等级 码龄5年 1605粉丝 47原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值