- 1、本文档共53页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
linux软件工程师C语言实用教程
第 6 章 进程控制 本章重点 进程的基本概念及进程的结构 Linux环境下进程的相关函数的应用 守护进程的概念、启动和建立 进程控制程序的编写 6.1 进程简介 进程是一个程序的一次执行的过程。 在Linux环境下,每个正在运行的程序都称为进程。 每个进程包含进程标识符及数据,这些数据包含进程变量、外部变量及进程堆栈等。 1. 进程与程序 由于一个进程对应一个程序的执行,但进程不等同于程序。因为程序是静态的概念,进程是动态的概念。 进程是程序执行的过程,包括了动态创建、调度和消亡的整个过程。进程是程序执行和资源管理的最小单位。 对系统而言,当用户在各级系统中键入命令执行一个程序的时候,它将启动一个进程,因此,一个程序可以对应多个进程。 6.1 进程简介 2. Linux环境下的进程管理 Linux环境下的进程管理包括启动进程和调度进程。 启动进程有两种主要途径:手工启动和调度启动。 (1)手工启动又可分为前台启动和后台启动。 前台启动:是手工启动一个进程的最常用方式。一般地,当用户输入一个命令时,就已经启动了一个进程,并且是一个前台的进程。 后台启动:往往是在该进程非常耗时,且用户也不急着需要结果的时候启动。一般地,当用户输入一个命令结尾加上一个“”号,就是后台启动一个进程。 6.1 进程简介 (2)调度启动 有时系统需要进行一些比较费时而且占用资源的维护工作,并且这些工作适合在深夜无人职守的时候进行,这时用户就可以事先进行调度安排,指定任务运行的时间或者场合,到时候系统就会自动完成这一切工作。 6.1 进程简介 调度进程包括对进程的中断操作、改变优先级、查看进程状态等。 Linux环境下常见的进程调用命令 6.2 Liunx进程控制 Linux环境下在进程启动时,系统会分配一个唯一的数值给每个进程,这个数值就称为进程标识符。 在Linux中最主要的进程标识有进程号(PID)和它的父进程号(PPID)。 PID惟一地标识一个进程。 PID和PPID都是非零的正整数。 在Linux中获得当前进程的PID和PPID的系统调用函数为getpid和getppid函数。 6.2 Liunx进程控制 例6-1:设计一个程序,要求显示Linux系统分配给此程序的进程号(PID)和它的父进程号(PPID)。 源程序代码: 6.2 Liunx进程控制 getpid函数说明 6.2.1 进程的相关函数 Linux c与进程相关的主要函数 6.2.2 进程创建 1. exec函数 例6-2:设计一个程序,程序在运行时,能执行vim程序,即创建一个新的进程,并用ps命令查看程序的进程号与vim的进程号。 源程序代码: 6.2.2 进程创建 编译、运行程序,系统会出现运行结果,先显示Linux系统分配的进程号(PID),接着运行vim程序,创建新的进程。 再打开一个终端,用ps查看原进程和新创建进程的进程号(PID)。 可以看到,在新进程创建后,原来的进程已经终止了。 在用execve函数创建新进程后,会以新的程序取代原来的进程,然后系统会从新进程运行,但是新进程的PID值会与原来进程的PID值相同。一般情况下,在运行execve函数后是不会返回原进程的,只有在错误时才会返回-1,所以在原进程中的execve函数下方,加入perror函数,输出错误信息,并返回1,表示有错误发生。 6.2.2 进程创建 实际上,在Linux中并没有exec函数,而是有6个以exec开头的函数族。 exec函数族的6个成员函数的语法 6.2.2 进程创建 思考题1:execv函数的应用,要在程序中执行命令:ps -ef,命令ps在/bin目录下。在这一函数中,参数v表示参数传递(含命令)为构造指针数组方式: char *arg[]={ps,-ef,NULL}; 函数的使用为: execv(/bin/ps,arg); 参考程序: #includestdio.h /*文件预处理,包含标准输入输出库*/ #includeunistd.h /*文件预处理,包含getpid、getppid函数库*/ int main () /*C程序的主函数,开始入口*/ { char *arg[]={ls,-al,NULL}; execv(/bin/ls,arg); return 1; } 6.2.2 进程创建 思考题2:execlp 函数的应用,要在程序中执行命令:ps -ef,命令ps在/bin目录下。在这一函数中,参数l表示命令或参数逐个列举,参数p为文件查找方式(不需要给出路径)。因而此函数的调用形式为: execlp(ps,ps,-ef,NULL); 请编写一程序进行调试。
文档评论(0)