第15章进程控制

上传人:仙*** 文档编号:176199925 上传时间:2022-12-21 格式:PPT 页数:22 大小:327.03KB
收藏 版权申诉 举报 下载
第15章进程控制_第1页
第1页 / 共22页
第15章进程控制_第2页
第2页 / 共22页
第15章进程控制_第3页
第3页 / 共22页
资源描述:

《第15章进程控制》由会员分享,可在线阅读,更多相关《第15章进程控制(22页珍藏版)》请在装配图网上搜索。

1、第第15章章 进程控制进程控制Linux系统是多任务操作系统,可同时进行多个程序完系统是多任务操作系统,可同时进行多个程序完成多项工作。进程是处于活动状态的程序,在操作系统的管成多项工作。进程是处于活动状态的程序,在操作系统的管理下,所有进程共享计算机中的硬件资源。进程作为系统运理下,所有进程共享计算机中的硬件资源。进程作为系统运行时的基本逻辑成员,不仅作为独立个体运行在系统上,而行时的基本逻辑成员,不仅作为独立个体运行在系统上,而且还将相互竞争系统资源。了解进程的本质对于理解、描述且还将相互竞争系统资源。了解进程的本质对于理解、描述和设计系统软件有着极为重要的意义,了解进程的活动状态和设计系

2、统软件有着极为重要的意义,了解进程的活动状态也有利于设计复杂的程序。也有利于设计复杂的程序。15.1 进程的基本概念进程的基本概念在讨论进程的基本概念之前,我们首先介绍两种查看在讨论进程的基本概念之前,我们首先介绍两种查看Linux系统中进程信息的方法。系统中进程信息的方法。15.1.1 进程状态和状态转换进程状态和状态转换进程在生存周期中呈现出各种状态及状态的转换,这进程在生存周期中呈现出各种状态及状态的转换,这些信息反映了进程的获取系统资源的情况。些信息反映了进程的获取系统资源的情况。Linux系统的进系统的进程状态模型见表程状态模型见表15.1所示。所示。15.1.1 进程状态和状态转换

3、进程状态和状态转换1子进程被子进程被Linux内核调入内核调入CPU执行的过程执行的过程 15.1.1 进程状态和状态转换进程状态和状态转换2子进程进入睡眠状态子进程进入睡眠状态 15.1.1 进程状态和状态转换进程状态和状态转换3子进程结束子进程结束 15.1.2 进程控制进程控制在在Linux系统中,用户创建子进程的惟一方法就是使系统中,用户创建子进程的惟一方法就是使用用fork系统调用。系统调用。fork系统调用的流程如图系统调用的流程如图15.5所示。所示。15.1.3 进程调度进程调度Linux系统进程调度包括两个概念,分别是调度时机和系统进程调度包括两个概念,分别是调度时机和调度算

4、法。调度时机指进程何时被调度上调度算法。调度时机指进程何时被调度上CPU执行。例如,执行。例如,转变为睡眠状态的进程将获得较高的优先级,一但所需要的转变为睡眠状态的进程将获得较高的优先级,一但所需要的资源被释放,该进程可以立即被调度上资源被释放,该进程可以立即被调度上CPU执行。被抢占的执行。被抢占的进程也将获得一个较高的优先级,抢占其进程也将获得一个较高的优先级,抢占其CPU时钟周期的进时钟周期的进程一旦转为用户状态,被抢占的进程立即转为内核状态。调程一旦转为用户状态,被抢占的进程立即转为内核状态。调度算法所关心的内容就是如何为进程分配优先级。度算法所关心的内容就是如何为进程分配优先级。15

5、.2 进程基本操作进程基本操作本节将通过介绍关于进程操作的系统调用函数来讲解本节将通过介绍关于进程操作的系统调用函数来讲解进程的基本操作方法,其中包括进程的基本操作方法,其中包括fork调用、调用、exec调用、调用、exit调用、调用、wait调用和调用和sleep调用,相关函数被定义在系统调用库调用,相关函数被定义在系统调用库“unistd.h”中。通过本节,我们将了解如何产生子进程,进中。通过本节,我们将了解如何产生子进程,进程如何改变它的执行映像,父子进程的同步等操作。由此也程如何改变它的执行映像,父子进程的同步等操作。由此也了解到一些并行程序的基本概念与如何设计简单的并行程序了解到一

6、些并行程序的基本概念与如何设计简单的并行程序。15.2.1 fork系统调用系统调用fork系统调用有两个函数,分别是系统调用有两个函数,分别是fork()函数和函数和vfork()函数。函数。fork系统调用可创建一个子进程,该调用的一般形式系统调用可创建一个子进程,该调用的一般形式是:是:pid_t fork(void);pid_t vfork(void);15.2.2 exec系统调用系统调用系统调用系统调用exec以新进程替代原有进程,但是以新进程替代原有进程,但是PID保持不保持不变。因此可以认为,变。因此可以认为,exec系统调用实际上没有创建新进程,系统调用实际上没有创建新进程,

7、只是替换了原有进程上下文的内容。只是替换了原有进程上下文的内容。15.2.3 exit系统调用系统调用系统调用系统调用exit的功能是终止发出调用的进程,它包含两的功能是终止发出调用的进程,它包含两个函数,分别是个函数,分别是_exit()函数和函数和exit函数。它们的一般形式如函数。它们的一般形式如下:下:void _exit(int status);void exit(int status);系统调用系统调用_exit()立即终止发出调用的进程。所有属于该立即终止发出调用的进程。所有属于该进程的文件描述符都关闭。如果该进程拥有子进程,那么父进程的文件描述符都关闭。如果该进程拥有子进程,那

8、么父子进程关系被转到子进程关系被转到init进程上。被结束的进程将收到来自子进程上。被结束的进程将收到来自子进程的僵死信号进程的僵死信号SIGCHLD。如果被结束的进程在控制台或。如果被结束的进程在控制台或终端上运行,终端上运行,shell程序将收到程序将收到SIGHUP信号。信号。15.2.4 wait系统调用系统调用系统调用系统调用wait用于父进程与子进程同步。父进程调用后用于父进程与子进程同步。父进程调用后,将进入睡眠状态,直到子进程结束或者父进程在被其他进,将进入睡眠状态,直到子进程结束或者父进程在被其他进程终止。使用程终止。使用wait系统调用需要包含头文件系统调用需要包含头文件“

9、sys/types.h”和和“sys/wait.h”。15.2.5 sleep函数调用函数调用系统调用系统调用sleep用来使进程主动进入睡眠状态,该函数用来使进程主动进入睡眠状态,该函数的一般形式是:的一般形式是:sleep(秒数秒数);执行该系统调用后,进程将进入睡眠状态,直到指定执行该系统调用后,进程将进入睡眠状态,直到指定的秒数已到。正常情况下,该调用的返回值为的秒数已到。正常情况下,该调用的返回值为0,若是因为,若是因为被信号所唤醒,则返回值为原始秒数减去已睡眠秒数的差。被信号所唤醒,则返回值为原始秒数减去已睡眠秒数的差。15.3 进程的特殊操作进程的特殊操作上一节介绍了有关进程的一

10、些基本操作,如进程的产上一节介绍了有关进程的一些基本操作,如进程的产生、进程的终止、进程执行映像的改变、等待子进程终止等生、进程的终止、进程执行映像的改变、等待子进程终止等。本节要介绍一些有关进程的特殊操作。有了这些操作,就。本节要介绍一些有关进程的特殊操作。有了这些操作,就使得进程的编程更加完善,能编制更为实用的程序。主要的使得进程的编程更加完善,能编制更为实用的程序。主要的内容有得到关于进程的各种内容有得到关于进程的各种ID、对进程的设置用户、对进程的设置用户ID、改、改变进程的工作目录、根交换和改变进程的优先级等操作。变进程的工作目录、根交换和改变进程的优先级等操作。15.3.1 获得进

11、程获得进程ID获得运行进程的获得运行进程的GID可使用可使用getgid()函数,获得运行进函数,获得运行进程的程的EGID可使用可使用getegid()函数。标识函数。标识GID与与EGID的不同是的不同是由于执行文件设置由于执行文件设置set-gid位引起的。位引起的。注意:注意:GID和和PGID的区别是,一般执行该进程的用户的区别是,一般执行该进程的用户的组的组ID就是该进程的就是该进程的GID,如果该执行文件设置了,如果该执行文件设置了set_gid位位,则文件所群组,则文件所群组ID就是该进程的就是该进程的GID。一个进程在。一个进程在shell下执下执行,行,shell程序就将该

12、进程的程序就将该进程的PID作为该进程组作为该进程组PGID,从该进,从该进程派生的子进程都拥有父进程所属进程组程派生的子进程都拥有父进程所属进程组PGID,除非父进,除非父进程将子进程的程将子进程的PGID设置成与该子进程的设置成与该子进程的PID一样。一样。15.3.2 setuid和和setgid系统调用系统调用设置进程的设置进程的UID可使用可使用setuid()函数,设置进程的函数,设置进程的GID可可使用使用setgid()函数。函数。setuid()函数可修改发出调用进程的函数可修改发出调用进程的UID,参数,参数uid为创为创建进程的用户信息。如果以普通用户的建进程的用户信息。

13、如果以普通用户的UID作为参数执行该作为参数执行该调用,调用,Linux内核将直接设置进程内核将直接设置进程UID为参数为参数uid信息。如果信息。如果以根用户的以根用户的UID作为参数,为了保障系统的安全性,作为参数,为了保障系统的安全性,Linux内核将以进程表和内核将以进程表和u区中用户真实的标识号来设置进程区中用户真实的标识号来设置进程UID。setuid()函数执行成功时,返回值为函数执行成功时,返回值为0,否则返回,否则返回-1。setgid()函数可修改发出调用进程的函数可修改发出调用进程的GID,与前者不同,与前者不同,该调用不会检验用户的真实身份。参数,该调用不会检验用户的真

14、实身份。参数gid为进程的新为进程的新GID信息。执行成功时,返回值为信息。执行成功时,返回值为0,否则返回,否则返回-1。15.3.3 setpgrp和和setpgid系统调用系统调用系统调用系统调用setpgrp()和和setpgid()都是用来设置进程都是用来设置进程PGID,它们,它们的一般形式为:的一般形式为:int setpgrp(void);int setpgid(pid_t pid,pid_t pgid);其中,其中,setpgrp()函数直接将进程的函数直接将进程的PGID设为与设为与PID相同的数相同的数值,值,setpgid()以其中参数修改以其中参数修改PGID。参数。

15、参数pid为指定进程的为指定进程的PID,值为值为0时修改发出调用进程的时修改发出调用进程的PGID。参数。参数pgid为指定的为指定的PGID信息信息,值为,值为0时,修改所有时,修改所有PID与参数与参数pid相等的进程,将这些进程的相等的进程,将这些进程的PGID值设为参数值设为参数pgid的值。若以普通用户权限发出此调用,而的值。若以普通用户权限发出此调用,而PGID原本为根用户组所有,那么只有在指定进程与调用进程的原本为根用户组所有,那么只有在指定进程与调用进程的EUID相同时,或者指定进程为调用进程的子进程时才有效。相同时,或者指定进程为调用进程的子进程时才有效。15.3.4 ch

16、dir系统调用系统调用在文件操作部分曾介绍过在文件操作部分曾介绍过chdir()系统调用,该调用对于系统调用,该调用对于进程控制有不同的意义。进程控制有不同的意义。chdir()函数将进程的当前工作目录函数将进程的当前工作目录改为由参数指定的目录。该调用的一般形式如下:改为由参数指定的目录。该调用的一般形式如下:int chdir(const char*path);参数参数path为指定目录的路径,发出该调用的进程必须为指定目录的路径,发出该调用的进程必须具备该目录的执行权限。调用成功时返回值为具备该目录的执行权限。调用成功时返回值为0,否则返回,否则返回-1,并设置相应的错误代码。,并设置相

17、应的错误代码。15.3.5 chroot系统调用系统调用系统调用系统调用chroot又被称为根交换操作,作用通常是在一又被称为根交换操作,作用通常是在一个个Linux系统上虚拟另一个系统上虚拟另一个Linux系统,根交换后,所有的命系统,根交换后,所有的命令操作都被重新定向。该调用的一般形式如下:令操作都被重新定向。该调用的一般形式如下:int chroot(const char*path);参数参数path为新的根目录路径,执行后,进程将以该目为新的根目录路径,执行后,进程将以该目录作为根目录,并且使进程不能访问该目录以外的内容。该录作为根目录,并且使进程不能访问该目录以外的内容。该操作不改

18、变当前工作目录,如果当前工作目录在指定目录以操作不改变当前工作目录,如果当前工作目录在指定目录以外,则无法访问其中内容。根交换操作只能由根用户发出,外,则无法访问其中内容。根交换操作只能由根用户发出,调用成功时返回值为调用成功时返回值为0,错误时返回,错误时返回-1,并设置相应的错误,并设置相应的错误代码。代码。15.3.6 nice系统调用系统调用系统调用系统调用nice()用来改变进程的优先级。该调用的一般用来改变进程的优先级。该调用的一般形式如下:形式如下:int nice(int inc);参数参数inc为调用为调用nice()函数的进程优先级数值的增量。优函数的进程优先级数值的增量。

19、优先级数值越低的值,被调度上先级数值越低的值,被调度上CPU运行的机会越大;优先级运行的机会越大;优先级数值越高,被调度上数值越高,被调度上CPU运行的机会越低。但是,只有根用运行的机会越低。但是,只有根用户能为户能为inc参数设置负值,使进程优先级提高,普通用户设参数设置负值,使进程优先级提高,普通用户设置的正值会降低优先级。调用成功时,返回值为置的正值会降低优先级。调用成功时,返回值为0,否则返,否则返回回-1。15.4 小结小结本章介绍了进程的基本概念和基本操作方法,讲解了本章介绍了进程的基本概念和基本操作方法,讲解了与进程操作有关的与进程操作有关的Linux系统调用函数。进程操作涉及到

20、许系统调用函数。进程操作涉及到许多操作系统和多操作系统和Linux内核方面的知识,读者不能理解时,请内核方面的知识,读者不能理解时,请查阅操作系统相关的理论书籍。进程控制对于发布大型软件查阅操作系统相关的理论书籍。进程控制对于发布大型软件非常有用,将程序实现不同功能的代码分开编译为可执行文非常有用,将程序实现不同功能的代码分开编译为可执行文件,实现分而治之的思想。用一个主控制程序调用其他的程件,实现分而治之的思想。用一个主控制程序调用其他的程序,每个可执行文件的大小都有限,不用一次将所有程序调序,每个可执行文件的大小都有限,不用一次将所有程序调入内存。通过网络对软件升级时,每次也只用从网络传输被入内存。通过网络对软件升级时,每次也只用从网络传输被改动的可执行文件,保证了升级过程的平稳过渡。改动的可执行文件,保证了升级过程的平稳过渡。

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!