网站大量收购闲置独家精品文档,联系QQ:2885784924

第2章进程管理5-LINUX进程控制详解.ppt

  1. 1、本文档共21页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* 那么调用这个fork函数时发生了什么呢? 一个程序一调用fork函数,系统就为一个新的进程准备了前述三个段,首先,系统让新的进程与旧的进程使用同一个代码段,因为它们的程序还是相同的,对于数据段和堆栈段,系统则复制一份给新的进程,这样,父进程的所有数据都可以留给子进程,但是,子进程一旦开始运行,虽然它继承了父进程的一切数据,但实际上数据却已经分开,相互之间不再有影响了,也就是说,它们之间不再共享任何数据了。而如果两个进程要共享什么数据的话,就要使用另一套函数(shmget,shmat,shmdt等)来操作。现在,已经是两个进程了,对于父进程,fork函数返回了子程序的进程号,而对于子程序,fork函数则返回零,这样,对于程序,只要判断fork函数的返回值,就知道自己是处于父进程还是子进程中。 Company Name 第2章 进程管理 --LINUX进程控制 * LINUX系统进程描述 fork exec函数簇 6.1 LINUX进程 * * Linux系统中各进程构成树型结构,系统初启时生成0#进程(或称idle进程),由它创建1#进程(init进程),1#进程创建getty进程, getty进程在用户试图登录时创建login进程,login进程再创建shell进程,它负责执行shell命令解释程序。用户与系统交互过程中,由shell进程为敲入的命令创建若干进程,每个子进程执行一条命令。这些子进程也可以再创建子进程。 6.1 LINUX进程 * Linux进程 终端管理进程与shell进程是init进程的子进程,而其它用户的进程则是由shell进程创建的。所以在Linux系统中,除了0#进程以外的所有进程都是由init进程衍生出来的,故也称init进程是所有用户进程的祖先。 * Linux进程控制实验一 用命令 ps –Al 查看liunx当前系统进程,并画出系统进程家族树。 * ps –Al PID:进程号 PPID:父进程号 父进程为什么要创建子进程呢? Linux是一个多用户操作系统,在同一时间会有许多的用户在争夺系统的资源。有时进程为了早一点完成任务就创建子进程来争夺资源。 一旦子进程被创建,父子进程一起从fork处继续执行,相互竞争系统的资源。 * fork创建新进程 为新进程生成task_struct结构 为新进程赋予一个统一的标识(PID) 为进程映像分配存储空间 将新进程插入就绪队列 LINUX进程创建 fork的使用 在Linux下产生新的进程的系统调用就是fork,这个词是英文中“分叉”的意思。 为什么取这个名字呢? 因为一个进程在运行中,如果使用了fork,就产生了另一个进程,于是进程就“分叉”了。 int main(void) //fork1.c { int i; if ( fork( ) = = 0 ) { /* 子进程执行 */ for ( i = 1; i 10; i ++ ) printf(This is child process\n); } else { /* 父进程执行*/ for ( i = 1; i 10; i ++ ) printf(This is parent process\n); } } 系统调用fork() fork系统调用特点 一次调用两次返回 系统调用fork() fork系统调用格式: pid=fork(); fork()返回值意义如下: 0:在子进程中,pid变量保存的fork()返回值为0,表示当前进程是子进程。 0:在父进程中,pid变量保存的fork()返回值为子进程的id值(进程唯一标识符)。 -1:创建失败。 int main(void) { int pid,n=0; n=1; while((pid=fork())==-1); if(pid==0) printf(child process,n=%d\n,n++); else printf(father rocess,n=%d\n,n+3); } 例1 连续两个fork,及进程家族树。 #include unistd.h int main(void) { fork(); putchar(A); } 1 2 连续2个fork #include unistd.h int main(void) { fork(); fork(); putchar(A); } 进程控制实验二: 写出输出结果,并画出进程家族树(必须编号) 进程控制实验四 如果父进程需要创建三个进程,但不想创建孙子进程,编写程序,并画出进程家族树(进程家庭树中填写进程PID,使用getpid, getppid)。 进程控制练习五 进程创建。 编写一段程序,使用系统调用

文档评论(0)

shuwkb + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档