实验2--进程观察实验.doc

实验2--进程观察实验.doc

ID:59189084

大小:29.50 KB

页数:7页

时间:2020-10-30

实验2--进程观察实验.doc_第1页
实验2--进程观察实验.doc_第2页
实验2--进程观察实验.doc_第3页
实验2--进程观察实验.doc_第4页
实验2--进程观察实验.doc_第5页
资源描述:

《实验2--进程观察实验.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、实验二进程观察实验(二):进程的控制实验目的1、了解进程创建后对进程控制的系统调用,可实现对进程的有效控制2、掌握进程的睡眠、同步、撤消等进程控制方法实验内容1、通过相关命令,对进程的状态进行控制。2、编写程序,使用fork()创建一个子进程。使用相关的系统调用控制进程的状态。观察并分析多进程的执行次序及状态转换。实验基础一、进程的控制进程因创建而存在,因执行完成或异常原因而终止.在进程的生命周期中,进程在内存中有三种基本状态:就绪,执行,阻塞.进程状态的转换是通过进程控制原语来实现的。Linux操作系统提供了相应功能的系统调用及命令,来实

2、现用户层的进程控制。二、相关的命令(1)睡眠指定时间执行格式:#sleepxx为指定睡眠的秒数。(2)结束或终止进程kill执行格式:#kill[-9]PID(PID为利用ps命令所查出的processID)例:kill-9456终止processID为456的process(3)后台(background)执行processcommand的命令执行格式:#command&(在命令后加上&)例:gccfile1&在后台编译file1.c注意:按下^Z,暂停正在执行的process。键入”bg”,将所暂停的process置入backgroun

3、d中继续执行。例:#gccfile1&^Zstopped#bg(4)查看正在background中执行的process执行格式:#jobs(5)结束或终止在background中的进程kill执行格式:#kill%n例:kill%1终止在background中的第一个jobkill%2终止在background中的第二个job三、相关的系统调用在LINUX中fork()是一个非常有用的系统调用,但在LINUX中建立进程除了fork()之外,也可用与fork()配合使用的exec()。1、exec()系列系统调用exec()系列,也可用于新程

4、序的运行。fork()只是将父进程的用户级上下文拷贝到新进程中,而exec()系列可以将一个可执行的二进制文件覆盖在新进程的用户级上下文的存储空间上,以更改新进程的用户级上下文。exec()系列中的系统调用都完成相同的功能,它们把一个新程序装入内存,来改变调用进程的执行代码,从而形成新进程。如果exec()调用成功,调用进程将被覆盖,然后从新程序的入口开始执行,这样就产生了一个新进程,新进程的进程标识符id与调用进程相同。exec()没有建立一个与调用进程并发的子进程,而是用新进程取代了原来进程。所以exec()调用成功后,没有任何数据返回

5、,这与fork()不同。exec()系列系统调用在LINUX系统库unistd.h中,共有execl、execlp、execle、execv、execvp五个,其基本功能相同,只是以不同的方式来给出参数。一种是直接给出参数的指针,如:intexecl(path,arg0[,arg1,...argn],0);char*path,*arg0,*arg1,...,*argn;另一种是给出指向参数表的指针,如:intexecv(path,argv);char*path,*argv[];另外,在linux中,出于安全的考虑,限制了exec()可以执行

6、的新程序的位置为系统指定的搜索路径。例如:execl(“/bin/ls”,”ls”,NULL);execl(“/usr/bin/gcc”,”-v”,NULL);execl(“./test”,NULL);//当前目录下的可执行程序2、exec()和fork()联合使用系统调用exec和fork()联合使用能为程序开发提供有力支持。用fork()建立子进程,然后在子进程中使用exec(),这样就实现了父进程与一个与它完全不同子进程的并发执行。一般,wait、exec联合使用的模型为:intstatus;............if(fork()

7、==0){...........;execl(...);...........;}wait(&status);3、wait()等待子进程运行结束。如果子进程没有完成,父进程一直等待。wait()将调用进程挂起,直至其子进程因暂停或终止而发来软中断信号为止。如果在wait()前已有子进程暂停或终止,则调用进程做适当处理后便返回。wait()给我们提供了一种实现进程同步的简单方法。系统调用格式:intwait(status) int*status;其中,status是用户空间的地址。它的低8位反应子进程状态,为0表示子进程正常结束,非0则表示出

8、现了各种各样的问题;高8位则带回了exit()的返回值。exit()返回值由系统给出。核心对wait()作以下处理:(1)首先查找调用进程是否有子进程,若无,则返回出错码;(2)

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。