实验一-进程控制实验

合集下载

操作系统实验 实验1 进程描述与控制

操作系统实验 实验1 进程描述与控制

操作系统实验实验1 进程描述与控制操作系统是计算机系统中重要的组成部分,负责管理计算机的硬件资源,并为用户提供一个友好的界面。

进程是操作系统中的核心概念之一,它代表了正在运行的程序实例。

本次实验旨在通过实践,帮助学生们理解进程的描述和控制。

一、实验目的实验的主要目的是加深学生对操作系统中进程概念的理解,培养学生对进程描述和控制的能力。

通过本次实验,学生将学习以下内容:1. 了解进程的概念和特性;2. 学习进程的描述方法;3. 掌握进程的控制方法。

二、实验内容1. 进程描述进程描述是指对进程进行详细的定义和描述。

学生们需要了解进程的状态,包括运行状态、就绪状态和阻塞状态,并能够描述进程的优先级、标示符等基本属性。

2. 进程控制进程控制包括对进程的创建、调度、挂起和销毁等操作。

学生们需要通过编程实践,掌握这些基本的进程控制操作。

在实验中,可以通过编写相关的程序,并模拟进程的创建和调度等操作,进一步理解进程控制的过程和原理。

三、实验步骤1. 进程描述在实验开始前,学生们应先学习进程的基本概念和特性,了解进程的状态和属性。

然后,根据自己的理解,对进程进行描述。

可以借助图表或文字等形式,将进程的状态和属性进行清晰的描述。

2. 进程控制学生们可以选择使用合适的编程语言,编写程序来模拟进程的创建、调度和销毁等操作。

在编写程序的过程中,可以利用操作系统提供的相关函数和接口,完成进程的控制操作。

学生们可以尝试编写多个进程,并通过调度算法控制进程的执行顺序。

3. 实验结果分析在实验结束后,学生们应对实验结果进行分析。

可以观察和比较不同进程调度算法的执行效果,尝试找出优化的方案。

同时,也要考虑进程的优先级对整体执行效率的影响。

四、实验总结本次实验通过操作系统实际的编程实践,帮助学生们深入理解了进程的描述和控制。

同时,也为学生们提供了一个锻炼编程能力和分析问题能力的机会。

通过本次实验,我们希望能够培养学生们的问题解决能力和团队合作精神。

进程控制实验报告

进程控制实验报告

测试过程: (实验中出现的问题、错误、解决方法)创建好项目和文件, 对文件进行编译和运行, 编译没有错误, 但是运行总是提示有2个错误。

解决办法:在新建项目的时候“新建”, 然后新建文件, 程序就可以正常的运行了。

实验总结:1、课下没有对Microsoft Visual c++ 6.0进行深入的研究, 还是好多问题不知道怎么解决, 好好钻研一下这个很有必要的啊!评语与成绩:教师签名:年月日实验名称进程控制实验类型验证性实验时间实验环境Windows xp 、Microsoft Visual c++ 6.0实验目的与要求:1.通过创建进程、观察正在运行的进程和终止进程的程序设计和调试操作, 进一步熟悉操作系统的进程概念, 理解Windows 2000进程的“一生”。

2.通过阅读和分析实验程序,学习创建进程、观察进程和终止进程的程序设计方法。

实验内容:本实验给出了三段程序:创建进程、正在运行的进程和终止进程, 阅读程序回答所提问题, 分析运行结果。

一、实验步骤: (算法描述、源程序、操作步骤和方法)二、创建进程回答问题:1.该程序是一个简单使用CreateProcess()API函数的例子。

首先形成简单的命令行, 提供当前EXE文件的指定文件名和代表生成克隆进程的号码。

大多数参数都可取默认值, 但是创建标志参数使用了CREATE_NEW_CONSOLE标志, 指示新进程分配自己的控制台, 这使得运行程序时, 在任务栏上产生许多活动标记。

然后该克隆进程的创建方法关闭传递过来的句柄并返回main ()函数。

在关闭程序之前, 每一进程的执行主线程暂停一下, 以便让用户看到其中的至少一个窗口。

2、CreateProcess()函数有几个核心参数?本实验程序中设置的各个参数的值是什么?答、CreateProcess()函数有10个核心参数参数的值为: CreateProcess(szFilename, //产生这个EXE的应用程序的名称szCmdLine, //告诉其行为像一个子进程的标志NULL, //缺省的进程安全性NULL, //缺省的线程安全性FALSE, //不继承句柄CREATE_NEW_CONSOLE, //使用新的控制台NULL, //新的环境NULL, //当前目录&si, //启动信息&pi);3.程序运行时屏幕显示的信息是什么?答、三、运行进程1、回答问题:2、给出运行结果(当前PID信息、操作系统版本、系统提示信息)答、运行结果为:2.如何获得当前的PID和操作系统版本可利用GetCurrentProcessId()API函数查看系统当前进程的标识符(pid), 该pid在整个系统中都可使用。

实验一 进程控制与处理机调度综合实验

实验一  进程控制与处理机调度综合实验

实验一进程控制与处理机调度综合实验一、实验目的通过模拟进程控制方法及单处理机系统的进程调度,了解进程的结构,进程的创建与撤消,进程的组织及进程的状态及其转换,掌握进程调度策略。

二、实验内容本实验为单机模拟进程调度算法,在程序设计时不需真正地建立线程或者进程。

实验模拟创建若干进程(人为输入或随机数产生),选择一种或几种单处理机的进程调度算法,如FCFS (先来先服务),SPF(短进程优先),RR(时间片轮转法),优先级算法等,模拟进行进程调度。

每进行一次调度,都打印一次运行进程、就绪队列、以及各个进程的PCB,并能在进程完成后及时撤消该进程。

三、算法描述1 进程及进程的运行状态进程是现代计算机中的基本要素,是系统分配资源和调度的基本单位。

进程与程序不同,进程是系统中动态的实体,有它的创建、运行和撤销的过程。

PCB块是系统感知进程存在的唯一实体。

进程的创建必须首先创建进程的PCB块,而进程的运行也伴随着PCB块的变化,进城撤销也要同时撤销它的PCB块。

所以本实验的任务就是通过模拟调度进程的PCB块来调度进程。

进程的PCB块包含以下四方面的内容:a) 进程标示符b) 处理及状态信息c) 进程调度信息d) 进程控制信息进程在运行中存在三种基本状态,分别是运行状态、就绪状态和阻塞状态。

2 进程调度一个运行进程的时间片用完或发生阻塞时,系统就会选择一个就绪进程调度执行。

进程的调度算法有很多如FCFS、SPF、优先级调度和时间片轮转方法。

进程调度算法模拟试验就是通过调度进程的PCB块来模拟调度进程。

在系统中PCB块就表现为一个结构体,PCB块之间的连接方式存在两种,一种是连接方式,一种是索引方式。

本试验中可选择任意一种连接方式。

3 例程设计一个有 N个进程共行的进程调度程序。

进程调度算法:采用最高优先数优先的调度算法(即把处理机分配给优先数最高的进程)。

每个进程有一个进程控制块(PCB)表示。

进程控制块可以包含如下信息:进程名、优先数、到达时间、需要运行时间、已用CPU时间、进程状态等等。

实验一进程控制PPT文档22页

实验一进程控制PPT文档22页

4. Linux控制函数—等待进程终止
wait(); waitpid();
① wait() 语法格式: pid=wait(stat_addr); wait()函数使父进程暂停执行,直到它的一个子进程结束为止,该函数 的返回值是终止运行的子进程的PID。参数status所指向的变量存放子 进程的退出码,即从子进程的main函数返回的值或子进程中exit()函数 的参数。如果status不是一个空指针,状态信息将被写入它指向的变量。
实验一、进程控制
一、实验目的
1、加深对进程的理解,进一步认识并发执行的实质; 2、分析进程争用资源现象,学习解决进程互斥的方法; 3、掌握Linux进程基本控制; 4、掌握Linux系统中的软中断和管道通信。
3、Linux进程管理命令—进程终止
终止一个进程或终止一个正在运行的程序
kill命令:根据PID向进程发送信号,缺省操作是停止进程 如果进程启动了子进程,只终止父进程,子进程运行中将仍 消耗资源成为“僵尸”进程,可用kill -9强制终止退出 pkill命令:终止同一进程组内的所有进程。允许指定要终 止的进程名称,而非PID Killall命令:与pkill应用方法类似,直接杀死运行中的程 序
父进程 实际执 行的程 序段
子进程 实际执 行的程
序段
67
4、 Linux进程控制函数—修改进程
函数族exec() :启动另外的进程取代当前的进程
#include <unistd.h> int execl(const char *path, const char *arg, ...); int execlp(const char *file, const char *arg, ...); int execle(const char *path, const char *arg, const char *envp[]); int execv(const char *path, const char *argv[]); int execve(const char *path, const char *argv[], const char *envp[]; int execvp(const char *file, const char *argv[]);

进程控制与进程通信程序实验报告

进程控制与进程通信程序实验报告

进程控制与进程通信程序实验报告一、引言进程是计算机系统中最基本的概念之一,是操作系统中最小的资源管理单位。

进程控制与进程通信是操作系统中重要的内容,涉及到进程的创建、调度和终止,以及进程间的信息传递和同步管理。

本实验旨在通过编写进程控制与进程通信程序,加深对操作系统中进程管理和通信机制的理解。

二、实验目的1. 理解进程的概念和特点,掌握进程的创建、调度和终止方法。

2. 掌握进程通信的基本原理和方法,包括共享内存、管道、消息队列和信号量等。

3. 能够编写简单的进程控制和进程通信程序。

三、实验内容1. 进程控制实验:编写一个程序,实现进程的创建、调度和终止。

通过调用系统调用函数,创建多个子进程,并通过进程控制函数实现父子进程的协作与同步。

2. 进程通信实验:编写一个程序,实现进程间的信息传递和同步管理。

通过共享内存、管道、消息队列或信号量等机制,实现不同进程之间的数据交换和共享。

四、实验步骤1. 进程控制实验:(1)创建父进程和子进程:使用fork()函数创建子进程,并通过判断返回值来区分父子进程。

(2)调度子进程:使用wait()函数等待子进程的结束,以实现父子进程的同步。

(3)终止子进程:使用exit()函数终止子进程的运行。

2. 进程通信实验:(1)共享内存:使用shmget()函数创建共享内存段,使用shmat()函数映射共享内存到进程的地址空间,实现共享数据的读写。

(2)管道:使用pipe()函数创建管道,使用fork()函数创建子进程,通过读写管道实现进程间的数据传输。

(3)消息队列:使用msgget()函数创建消息队列,使用msgsnd()函数向消息队列发送消息,使用msgrcv()函数从消息队列接收消息,实现进程间的消息传递。

(4)信号量:使用semget()函数创建信号量,使用semop()函数对信号量进行P操作和V操作,实现进程间的同步和互斥。

五、实验结果通过实验,我们成功实现了进程的创建、调度和终止,以及进程间的信息传递和同步管理。

实验一进程控制与描述

实验一进程控制与描述

死锁检测
死锁检测是通过检测系统状态是否满足死锁条件来确定系 统是否处于死锁状态。
死锁解除
死锁解除是当系统检测到死锁状态时采取措施来解除死锁 的过程。
资源有序分配法
资源有序分配法是一种预防死锁的方法,通过为每个资源 分配一个唯一的序号,并要求进程按照序号递增的顺序请 求资源来避免产生循环等待条件。
03 进程描述
实验一:进程控制与描述
目录
• 进程控制概述 • 进程控制机制 • 进程描述 • 实验步骤与操作 • 实验结果与分析
01 进程控制概述
进程的定义与特性
总结词
进程是程序的一次执行,具有动态性、 并发性、制约性、独立性和制约性等特 性。
VS
详细描述
进程是程序在计算机上的一次执行过程, 它具有动态性,即进程的状态可以在运行 过程中改变;并发性,即进程可以同时存 在于多个状态;制约性,即进程间的相互 制约关系;独立性,即进程是独立的,不 受其他进程的影响;制约性,即进程间的 相互制约关系。
04 实验步骤与操作
实验环境搭建
准备实验所需的操作 系统环境,如Linux 或Windows。
配置网络连接,确保 实验过程中能够访问 外部资源。
安装必要的软件工具, 如任务管理器、终端 等。
进程创建与终止实验
01 打开任务管理器或终端,
查看当前运行的进程。
观察并记录进程的创建 过程和结果,包括进程
PCB中包含了进程标识符、进 程状态、内存指针、文件描述 符表等信息。
通过PCB,操作系统可以对进 程进行创建、切换、终止等操 作,实现对进程的统一管理。
进程状态信息
1
进程状态信息是指描述进程当前状态的变量和数 据结构。

实验1 进程控制与描述

实验一:进程控制与描述一、实验目的:利用Windows提供的API函数,编写程序,实现进程的创建和终止(如创建写字板进程及终止该进程),加深对操作系统进程概念的理解,观察操作系统进程运行的动态性能,获得包含多进程的应用程序编程经验。

二、实验原理:1.进程的创建进程的创建通过CreateProcess()函数来实现,CreateProcess()通过创建一个新的进程及在其地址空间内运行的主线程来启动并运行一个新的程序。

具体地,在执行CreateProcess()函数时,首先由操作系统负责创建一个进程内核对象,初始化计数为1,并立即为新进程创建一块虚拟地址空间。

随后将可执行文件或其他任何必要的动态链接库文件的代码和数据装载到该地址空间中。

在创建主线程时,也是首先由系统负责创建一个线程内核对象,并初始化为1。

最后启动主线程并执行进程的入口函数WinMain(),完成对进程和执行线程的创建。

2.实现技巧CreateProcess()函数的原型声明如下:BOOL CreateProcess(LPCTSTR lpApplicationName, // 可执行模块名LPTSTR lpCommandLine, // 命令行字符串LPSECURITY_ATTRIBUTES lpProcessAttributes, // 进程的安全属性LPSECURITY_ATTRIBUTES lpThreadAttributes, // 线程的安全属性BOOL bInheritHandles, // 句柄继承标志DWORD dwCreationFlags, // 创建标志LPVOID lpEnvironment, // 指向新的环境块的指针LPCTSTR lpCurrentDirectory, // 指向当前目录名的指针LPSTARTUPINFO lpStartupInfo, // 指向启动信息结构的指针LPPROCESS_INFORMATION lpProcessInformation //指向进程信息结构的指针)可以指定第一个参数,即应用程序的名称,其中包括相对于当前进程的当前目录的全路径或者利用搜索方法找到的路径;lpCommandLine参数允许调用者向新应用程序发送数据;接下来的三个参数与进程和它的主线程以及返回的指向该对象的句柄的安全性有关。

实验一 进程控制描述与控制讲解

实验一进程控制描述与控制第一部分 Windows“任务管理器”的进程管理背景知识Windows 2000/XP/XP的任务管理器提供了用户计算机上正在运行的程序和进程的相关信息,也显示了最常用的度量进程性能的单位。

使用任务管理器,可以打开监视计算机性能的关键指示器,快速查看正在运行的程序的状态,或者终止已停止响应的程序。

也可以使用多个参数评估正在运行的进程的活动,以及查看CPU 和内存使用情况的图形和数据。

其中:1) “应用程序”选项卡显示正在运行程序的状态,用户能够结束、切换或者启动程序。

2) “进程”选项卡显示正在运行的进程信息。

例如,可以显示关于CPU 和内存使用情况、页面错误、句柄计数以及许多其他参数的信息。

3) “性能”选项卡显示计算机动态性能,包括CPU 和内存使用情况的图表,正在运行的句柄、线程和进程的总数,物理、核心和认可的内存总数(KB) 等。

实验目的通过在Windows 任务管理器中对程序进程进行响应的管理操作,熟悉操作系统进程管理的概念,学习观察操作系统运行的动态性能。

工具/准备工作在开始本实验之前,请回顾教科书的相关内容。

需要准备一台运行Windows 2000/XP/XP操作系统的计算机。

实验内容与步骤1. 使用任务管理器终止进程2. 显示其他进程计数器3. 更改正在运行的程序的优先级启动并进入Windows环境,单击Ctrl + Alt + Del键,或者右键单击任务栏,在快捷菜“运行”,并输入“taskmgr.exe”单中单击“任务管理器”命令,或者是在点击任务条上的“开始”打开“任务管理器”窗口。

在本次实验中,你使用的操作系统版本是:Microsoft Windows XP Professional 版本2002当前机器中由你打开,正在运行的应用程序有:1)实验一进程控制描述与控制34- Microsoft Word2) 我的电脑3) ftp://192.168.15.8/- Microsoft Internet Explorer4) __________________________________________________________________5) __________________________________________________________________Windows“任务管理器”的窗口由_5_个选项卡组成,分别是:1) 应用程序________________________________________________2) 进程__________________________________________________________3) 性能_____________________________________________________________4) 联网______________________________________________________________5) 用户_____________________________________________________________当前“进程”选项卡显示的栏目分别是(可移动窗口下方的游标/箭头,或使窗口最大化进行观察) :1. 使用任务管理器终止进程步骤1:单击“进程”选项卡,一共显示了__40_个进程。

上机实验1 进程控制与描述

dows 编程 1、背景知识
Windows 2000可以识别的应用程序包括控制台应 2000可以识别的应用程序包括控制台应 用程序、GUI应用程序和服务应用程序 用程序、GUI应用程序和服务应用程序 控制台应用程序可以创建GUI;GUI应用程序可以 控制台应用程序可以创建GUI;GUI应用程序可以 作为服务来运行; 作为服务来运行;服务也可以向标准的输出流写入 数据——不同类型应用程序间的惟一重要区别是其 数据——不同类型应用程序间的惟一重要区别是其 启动方法
– Windows 任务管理器的进程管理 – Windows 2000 编程 – Windows 2000 进程的“一生” 进程的“一生”
一、 Windows 任务管理器的进程管理 1、背景知识
Windows 2000的任务管理器提供了用户计算机上 2000的任务管理器提供了用户计算机上 正在运行的程序和进程的相关信息, 正在运行的程序和进程的相关信息,也显示了最常 用的度量进程性能的单位 使用任务管理器
– 可以打开监视计算机性能的关键指示器,快速查看正在 可以打开监视计算机性能的关键指示器, 运行的程序的状态,或者终止已停止响应的程序 运行的程序的状态, – 也可以使用多个参数评估正在运行的进程的活动,以及 也可以使用多个参数评估正在运行的进程的活动, 查看CPU 查看CPU 和内存使用情况的图形和数据
2、实验目的
通过对Windows编程 通过对Windows编程
– 进一步熟悉操作系统的基本概念 – 较好地理解Windows 的结构 较好地理解Windows
3、实验内容
简单的控制台应用程序 GUI应用程序 GUI应用程序 进程对象
三、Windows 进程的“一生” 进程的“一生” 1、背景知识

实验一进程控制描述与控制

实验一:进程控制描述与控制[1] Windows“任务管理器”的进程管理一、实验名称Windows“任务管理器”的进程管理二、实验目的通过在Windows 任务管理器中对程序进程进行响应的管理操作,熟悉操作系统进程管理的概念,学习观察操作系统运行的动态性能。

三、实验内容与步骤启动并进入Windows环境,单击Ctrl + Alt + Del键,或者右键单击任务栏,在快捷菜单中单击“任务管理器”命令,打开“任务管理器”窗口。

在本次实验中,你使用的操作系统版本是:_______Windows_XP______________________当前机器中由你打开,正在运行的应用程序有:1) _______ ________2) ___________实验一___3) _________操作系统_____________4) ___________百度首页 ________5)Windows“任务管理器”的窗口由____4__个选项卡组成,分别是:1) _______应用程序______________2) _进程__________________3) ______ 性能___________________4) ________联网__________________当前“进程”选项卡显示的栏目分别是 (可移动窗口下方的游标/箭头,或使窗口最大化进行观察) :1. 使用任务管理器终止进程步骤1:单击“进程”选项卡,一共显示了__40___个进程。

请试着区分一下,其中:系统 (SYSTEM) 进程有____25__个,填入表3-1中。

表3-1 实验记录Wmiprvse SYSTEM005376k cidaemon SYSTEM00300k cidaemon SYSTEM00856k cidaemon SYSTEM50284k cisvc SYSTEM00924k csrss SYSTEM007412k mqtgsvc SYSTEM004144k mqsvc SYSTEM006632k snmp SYSTEM004340k tcpservcs SYSTEM003840k Smss SYSTEM00404k System SYSTEM00300kSystem IdleSYSTEM9928k Processwinlogon SYSTEM001684kservices SYSTEM005776k lsass SYSTEM001100k svchost SYSTEM005324k mDNSResponder SYSTEM003920k svchost SYSTEM0018716k inetinfo SYSTEM0010608k samservice SYSTEM002460k PGPserv SYSTEM006880k PandoraService SYSTEM009148kspoolsv SYSTEM005688kMDM SYSTEM003416k服务 (SERVICE) 进程有_____5_个,填入表3-2中。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验一 进程控制
一、实验目的:
加深对进程概念的理解,明确进程和程序的区别;掌握Linux操作系统的进程创建和终
止操作,体会父进程和子进程的关系及进程状态的变化;进一步认识并发执行的实质,编写
并发程序。

二、实验平台:
虚拟机:VMWare9以上
操作系统:Ubuntu12.04以上
编辑器:Gedit | Vim
编译器:Gcc

三、实验内容:
(1)编写一段程序,使用系统调用fork()创建两个子进程,当此程序运行时,在系统中
有一个父进程和两个子进程活动。让每一个进程在屏幕上显示“身份信息”:父进程显示
“Parent process! PID=xxx1 PPID=xxx2”;子进程显示“Childx process! PID=xxx PPID=xxx”。
多运行几次,观察记录屏幕上的显示结果,并分析原因。
说明:
xxx1为进程号,用getpid()函数可获取进程号;
xxx2为父进程号,用getppid()函数可获取父进程号;
Childx中x为1和2,用来区别两个子进程;
wait()函数用来避免父进程在子进程终止之前终止。

程序源码:
#include
#include
#include
#define NUM 2
int main(void)
{
pid_t pid1,pid2;
if((pid1=fork())<0){
printf("创建进程1失败");
}else{

if(pid1==0){
//子进程1执行
printf("Child1 process: ");
printf("PID=%d PPID=%d \n",getpid(),getppid());
sleep(2);

}else{
if((pid2=fork())<0){
printf("创建进程2失败");
}else{
if(pid2==0){ //子进程2执行
printf("Child2 process: ");
printf("PID=%d PPID=%d \n",getpid(),getppid());
}
else{
//父进程执行
wait();
wait();
printf("Parent process: ");
printf("PID=%d PPID=%d \n",getpid(),getppid());
exit(0);
}
}
}
}
}
执行结果
whtcmiss@whtcmiss-VirtualBox:~/Desktop$ gcc test1.c -o test
whtcmiss@whtcmiss-VirtualBox:~/Desktop$ ./test
Child2 process: PID=2527 PPID=2525
Child1 process: PID=2526 PPID=2525
Parent process: PID=2525 PPID=2127
whtcmiss@whtcmiss-VirtualBox:~/Desktop$ ./test
Child2 process: PID=2530 PPID=2528
Child1 process: PID=2529 PPID=2528
Parent process: PID=2528 PPID=2127
whtcmiss@whtcmiss-VirtualBox:~/Desktop$ ./test
Child2 process: PID=2533 PPID=2531
Child1 process: PID=2532 PPID=2531
Parent process: PID=2531 PPID=2127
实验结果分析:
第一次程序运行结果,两个子进程的PPID都是2525,是由同一个进程创建。而父进程
PID是2525,父进程PPID是2127,说明父进程也是一系统进程的子进程。
第二次程序运行结果,父进程PID是2528,PPID是2127,说明父进程是由同一进程创
建的,父进程也是以子进程的方式存在,且进程ID是逐渐递增的。

(2)fork()和exec()系列函数能同时运行多个程序,利用上述函数将下面单进程顺序执行
的程序single.c改造成可并发执行3个进程的程序multi_process.c;并用time命令获取程序的执
行时间,比较单进程和多进程运行时间,并分析原因。
//single.c
#include
#define NUM 5
int main(void)
{
void print_msg(char *m);
print_msg("Good ");
print_msg("Morning ");
print_msg("007\n"); //将007替换为本人学号
return 0;
}
void print_msg(char *m)
{
int i;
for(i = 0; iprintf("%s",m);
fflush(stdout);
sleep(1);
}
}
编译运行方法:
#gcc single.c –o single
#time ./single

单线程执行结果:

多线程代码:
#multi_process.c
#include
#include
#include
#define NUM 5
int main(void)
{
pid_t pid[3];
int i;
for(i=1;i<=3;i++){
pid[i-1]=fork();
if(pid[i-1]==0||pid[i-1]==-1)
break;
}
if(pid[0]==0){
execl("print","print","Good",NULL);
}
else {
if(pid[1]==0){

execl("print","print","Hello",NULL);
}
else{
if(pid[2]==0){
execl("print","print","201300814113",NULL);
}
wait();
wait();
wait();
exit(0);
}
}
return 0;
}

实验分析:第二个实验结果,第二个程序的多线程因为是并发执行,而且是有三
个线程,所以在时间上几乎是单线程的1/3,而且因为是并发的,所以打印结果
是无序的。

实验总结
本次实验首先要明确
进程和程序的区别,我通过在Linux操作系统的进程创建和终

止操作,运行父进程和子进程,查看运行结果和进程状态的变化。实验过程中也了解了父进
程与子进程的运行过程及其机制。

相关文档
最新文档