【教学课件】第四章LINUX进程控制.ppt
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《【教学课件】第四章LINUX进程控制.ppt》由会员分享,可在线阅读,更多相关《【教学课件】第四章LINUX进程控制.ppt(87页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第四章 LINUX进程控制 UNIX进程简介 v进程的定义:进程是可并发执行的程序在一个数据集进程的定义:进程是可并发执行的程序在一个数据集合上的运行过程。合上的运行过程。进程的概念理解的核心:运行过程的理解,包括运进程的概念理解的核心:运行过程的理解,包括运行过程中的不同状态的理解。行过程中的不同状态的理解。正确理解进程和程序的关系。正确理解进程和程序的关系。v在在UNIXUNIX中,每个进程在创建时都会被分配一个数据结中,每个进程在创建时都会被分配一个数据结构,称为进程控制块(简称构,称为进程控制块(简称PCBPCB)。)。PCBPCB中包含了很中包含了很多重要的信息,其中最重要的进程多重
2、要的信息,其中最重要的进程IDID(process process IDID)了,在我们最常使用的了,在我们最常使用的X86X86架构上,其变化范围架构上,其变化范围是是0-327670-32767v一个或多个进程可以合起来构成一个进程组一个或多个进程可以合起来构成一个进程组(process groupprocess group),),一个或多个进程组可以合起来一个或多个进程组可以合起来构成一个会话(构成一个会话(sessionsession)。)。进程号#include/*#include/*提供类型提供类型pid_tpid_t的定义的定义*/*/#include/*#include/*提供
3、函数的定义提供函数的定义*/*/pid_tgetpid(void);pid_tgetpid(void);/*/*获得调用进程的获得调用进程的IDID号号*/*/pid_tgetppid(void);pid_tgetppid(void);/*/*获得调用者父进程的获得调用者父进程的IDID号号*/*/v程序的标识是程序名或文件名;v进程的标识就是进程号,进程号建立了进程和用户之间的联系。LINUX用户标识相应的每一个用户也有一个用户相应的每一个用户也有一个用户ID.ID.通过系统调用通过系统调用getuidgetuid可以得到进程的可以得到进程的所有者的所有者的ID.ID.由于进程要用到一些资源
4、由于进程要用到一些资源,而而LinuxLinux对系统资源是进行保护的对系统资源是进行保护的,为了获取一定资源进程还有一个有效用户为了获取一定资源进程还有一个有效用户ID.ID.这个这个IDID和系统的资源使用有和系统的资源使用有关关,涉及到进程的权限涉及到进程的权限.通过系统调用通过系统调用geteuidgeteuid我们可以得到进程的有效用我们可以得到进程的有效用户户ID.ID.和用户和用户IDID相对应进程还有一个组相对应进程还有一个组IDID和有效组和有效组IDID系统调用系统调用getgidgetgid和和getegidgetegid可以分别得到组可以分别得到组IDID和有效组和有效
5、组IDID创建子进程fork forkfork()系系统统调调用用创创建建一一个个新新的的进进程程,叫叫子子进进程程,是调用进程的一个复制品是调用进程的一个复制品.调用进程叫父进程。调用进程叫父进程。返回值返回值返回值返回值:调调用用成成功功则则对对子子进进程程返返回回0,0,对对父父进进程程返返回回子子进进程程号号,这这也也是是最最方方便便的的区区分分父父子子进进程程的的方方法法.若若调调用用失失败败则则返回返回-1-1给给父父进进程程,不生成子不生成子进进程程.Fork继承信息fork()fork()的的 子子 进进 程程 继继 承承 了了 父父 进进 程程 的的 几几 乎乎 所所 有有
6、的的 属属 性,包括性,包括:进程空间及其内容进程空间及其内容实际实际UID,GIDUID,GID和有效和有效UID,GIDUID,GID,附加附加GIDGID环境变量环境变量.调用调用exec()exec()时的关闭标志时的关闭标志.UIDUID设置模式比特位设置模式比特位.GIDGID设置模式比特位设置模式比特位.进程组号,会话进程组号,会话IDID,控制终端控制终端.当前工作目录,根目录当前工作目录,根目录.文件创建掩码文件创建掩码UMASK.UMASK.文件长度限制文件长度限制ULIMIT.ULIMIT.预预定定值值,如如优优先先级级和和任任何何其其他他的的进进程程预预定定参参数数,根
7、根据据种种类类不不同同决定是否可以继承决定是否可以继承.还有一些其它属性还有一些其它属性.Fork后子进程的不同信息 子进程也有与父进程不同的属性包括子进程也有与父进程不同的属性包括子进程也有与父进程不同的属性包括子进程也有与父进程不同的属性包括:进程号进程号,子进程号不同与任何一个活动的进程组号子进程号不同与任何一个活动的进程组号.父进程号父进程号.子子进进程程继继承承父父进进程程的的文文件件描描述述符符或或流流时时,具具有有自自己己的一个拷贝的一个拷贝并且与父进程和其它子进程共享该资源并且与父进程和其它子进程共享该资源.子进程的用户时间和系统时间被初始化为子进程的用户时间和系统时间被初始化
8、为0.0.子进程的超时时钟设置为子进程的超时时钟设置为0.0.子进程的信号处理函数指针组置为空子进程的信号处理函数指针组置为空.子进程不继承父进程的记录锁子进程不继承父进程的记录锁.关于fork的说明 v在Linux中,创造新进程的方法只有一个,就是fork。其他一些库函数,如system(),实际上也在内部调用了fork。vfork出错可能有两种原因:(1)当前的进程数已经达到了系统规定的上限,这时errno的值被设置为EAGAIN。(2)系统内存不足,这时errno的值被设置为ENOMEM。示例参考正文4.3Copy-On-Write的技术介绍vfork的实现并不做一个父进程数据段和堆的完
9、全拷贝,因为在fork之后经常跟随着exec。作为替代,使用了在写时复制(Copy-On-Write,COW)的技术(注意不包括栈空间)。这些区域由父、子进程共享,fork时内核将它们的存取许可权改变为只读。如果有进程试图修改这些区域,则内核为有关部分,典型的是虚存系统中的“页”,做一个拷贝。Exec替换进程映象vv第一个区别是前四个取路径名作为参数,后两个则取文件名作为参数。第一个区别是前四个取路径名作为参数,后两个则取文件名作为参数。第一个区别是前四个取路径名作为参数,后两个则取文件名作为参数。第一个区别是前四个取路径名作为参数,后两个则取文件名作为参数。当指定当指定当指定当指定filen
10、amefilenamefilenamefilename作为参数时:如果作为参数时:如果作为参数时:如果作为参数时:如果filenamefilenamefilenamefilename中包含中包含中包含中包含/,则就将其视为路径,则就将其视为路径,则就将其视为路径,则就将其视为路径名;否则就按名;否则就按名;否则就按名;否则就按PATHPATHPATHPATH环境变量,在有关目录中搜寻可执行文件环境变量,在有关目录中搜寻可执行文件环境变量,在有关目录中搜寻可执行文件环境变量,在有关目录中搜寻可执行文件vv第二个区别与参数表的传递有关第二个区别与参数表的传递有关第二个区别与参数表的传递有关第二个区
11、别与参数表的传递有关(l l l l表示列表表示列表表示列表表示列表,v v v v表示矢量表示矢量表示矢量表示矢量)。函数函数函数函数execlexeclexeclexecl、execlpexeclpexeclpexeclp和和和和execleexecleexecleexecle要求将新程序的每个命令行参数都说明为一个单独的参要求将新程序的每个命令行参数都说明为一个单独的参要求将新程序的每个命令行参数都说明为一个单独的参要求将新程序的每个命令行参数都说明为一个单独的参数。这种参数表以空指针结尾。对于另外三个函数数。这种参数表以空指针结尾。对于另外三个函数数。这种参数表以空指针结尾。对于另外三
12、个函数数。这种参数表以空指针结尾。对于另外三个函数(execveexecveexecveexecve,execvpexecvpexecvpexecvp和和和和execveexecveexecveexecve),则应先构造一个指向各参数的指针数组,然后将该数组地址作则应先构造一个指向各参数的指针数组,然后将该数组地址作则应先构造一个指向各参数的指针数组,然后将该数组地址作则应先构造一个指向各参数的指针数组,然后将该数组地址作为这三个函数的参数。为这三个函数的参数。为这三个函数的参数。为这三个函数的参数。vv最后一个区别与向新程序传递环境表相关。以最后一个区别与向新程序传递环境表相关。以最后一个区
13、别与向新程序传递环境表相关。以最后一个区别与向新程序传递环境表相关。以e e e e结尾的两个函数(结尾的两个函数(结尾的两个函数(结尾的两个函数(execleexecleexecleexecle和和和和execveexecveexecveexecve)可以传递一个指向环境字符串指针数组的指针。其他四个函可以传递一个指向环境字符串指针数组的指针。其他四个函可以传递一个指向环境字符串指针数组的指针。其他四个函可以传递一个指向环境字符串指针数组的指针。其他四个函数则使用调用进程中的数则使用调用进程中的数则使用调用进程中的数则使用调用进程中的environenvironenvironenviron变
14、量为新程序复制现存的环境。变量为新程序复制现存的环境。变量为新程序复制现存的环境。变量为新程序复制现存的环境。#include int execl(const char*path,const char*arg,.);int execv(const char*path,char*const argv);int execle(const char *path,const char *arg ,.,char*const envp);int execve(const char *path,char *const argv,char*const envp);int execlp(const char*f
15、ile,const char*arg,.);int execvp(const char*file,char*const argv);Exec的六个函数差异 这六个这六个这六个这六个execexec函数的参数很难记忆。函数名中的字符会给我们函数的参数很难记忆。函数名中的字符会给我们函数的参数很难记忆。函数名中的字符会给我们函数的参数很难记忆。函数名中的字符会给我们一些帮助。字母一些帮助。字母一些帮助。字母一些帮助。字母p p表示该函数取表示该函数取表示该函数取表示该函数取filenamefilename作为参数,并且用作为参数,并且用作为参数,并且用作为参数,并且用PATHPATH环境变量寻找可
16、执行文件。字母环境变量寻找可执行文件。字母环境变量寻找可执行文件。字母环境变量寻找可执行文件。字母l l表示该函数取一个参表示该函数取一个参表示该函数取一个参表示该函数取一个参数列表,它与字母数列表,它与字母数列表,它与字母数列表,它与字母v v互斥。互斥。互斥。互斥。v v表示该函数取一个参数数组表示该函数取一个参数数组表示该函数取一个参数数组表示该函数取一个参数数组argvargv 。最后,字母。最后,字母。最后,字母。最后,字母e e表示该函数取表示该函数取表示该函数取表示该函数取e nvpe nvp数组,而不使用当前环数组,而不使用当前环数组,而不使用当前环数组,而不使用当前环境。下图
17、显示了这六个函数之间的区别境。下图显示了这六个函数之间的区别境。下图显示了这六个函数之间的区别境。下图显示了这六个函数之间的区别Exec函数使用说明(一)1.ExecExec的基本实现思想的基本实现思想2.execexec新进程还继承原进程的如下属性新进程还继承原进程的如下属性:3.附加附加GIDGID、进程号进程号、父进程号父进程号、进程组号进程组号、会话号会话号、控制控制终端终端、alarmalarm时钟信号剩下的时间时钟信号剩下的时间、当前工作目录当前工作目录、根目录根目录、文件创建掩码文件创建掩码、资源限制资源限制、用户时间用户时间、系统时间系统时间、子进程用户子进程用户时间时间、子进
18、程系统时间子进程系统时间、记录锁记录锁、进程信号掩码进程信号掩码、信号屏蔽信号屏蔽、优先级优先级、预定值预定值.4.在调用这些系统调用前打开的文件指针对新进程来说也是打开在调用这些系统调用前打开的文件指针对新进程来说也是打开的的,除非它已定义了除非它已定义了close-on-execclose-on-exec标志标志.打开的文件指针在新进程打开的文件指针在新进程中保持不变中保持不变,所有相关的文件锁也被保留所有相关的文件锁也被保留.调用进程设置并正被调用进程设置并正被捕俘的信号在新进程中被恢复为缺省设置捕俘的信号在新进程中被恢复为缺省设置,其它的则保持不变其它的则保持不变.新进程启动时按文件的
19、新进程启动时按文件的SUIDSUID和和SGIDSGID设置定义文件的设置定义文件的UIDUID和和GIDGID为有效为有效UIDUID和和GID.GID.Exec函数使用说明(二)vv在在execexec前后实际用户前后实际用户IDID和实际组和实际组IDID保持不变,而有效保持不变,而有效IDID是否改变则取决于是否改变则取决于所执行程序的文件的设置所执行程序的文件的设置-用户用户-IDID位和设置位和设置-组组-IDID位是否设置。如果新位是否设置。如果新程序的该位已设置,则有效用户程序的该位已设置,则有效用户IDID变成程序文件所有者的变成程序文件所有者的IDID,否则有效否则有效用户
20、用户IDID不变。对组不变。对组IDID的处理方式与此相同。的处理方式与此相同。v例例:编译核心代码为下面的程序编译核心代码为下面的程序,形成目标代码形成目标代码a.outa.out printfprintf(uiduid=%d,=%d,euideuid=%dn,=%dn,getuidgetuid(),(),geteuidgeteuid();();1.1.1.1.$id$id$id$id查看当前用户查看当前用户查看当前用户查看当前用户uiduiduiduid和和和和gidgidgidgiduiduiduiduid=1028(=1028(=1028(=1028(zjtzjtzjtzjt)gid
21、gid gid gid=1028(=1028(=1028(=1028(zjtzjtzjtzjt)groups=1028()groups=1028()groups=1028()groups=1028(zjtzjtzjtzjt)2.2.2.2.$lslslsls l a.out;a.out l a.out;a.out l a.out;a.out l a.out;a.out;执行程序,显示与执行程序,显示与执行程序,显示与执行程序,显示与idididid命令一样的结果命令一样的结果命令一样的结果命令一样的结果-rwxrwxrrwxrwxrrwxrwxrrwxrwxr-x 1-x 1-x 1-x 1
22、zjt zjt zjt zjt zjt zjt zjt zjt 11585 Mar 25 11:38 a.out11585 Mar 25 11:38 a.out11585 Mar 25 11:38 a.out11585 Mar 25 11:38 a.outuiduiduiduid=1028,=1028,=1028,=1028,euideuideuideuid=1028=1028=1028=10283.3.3.3.$su su su su root root root root;进入根用户进入根用户进入根用户进入根用户#chmod chmod chmod chmod+s a.out+s a.ou
23、t+s a.out+s a.out;chownchownchownchown root a.out;exit root a.out;exit root a.out;exit root a.out;exit改变用户执行时改变用户执行时改变用户执行时改变用户执行时uiduiduiduid和和和和gidgidgidgid,设置用户的设置用户的设置用户的设置用户的ownerownerownerowner为根并退出根用户为根并退出根用户为根并退出根用户为根并退出根用户4.4.4.4.$lslslsls l a.out l a.out l a.out l a.out重新显示程序执行权限重新显示程序执行权限
24、重新显示程序执行权限重新显示程序执行权限-rwsrwsrrwsrwsrrwsrwsrrwsrwsr-x 1 root -x 1 root -x 1 root -x 1 root zjt zjt zjt zjt 11585 Mar 25 11:38 a.out11585 Mar 25 11:38 a.out11585 Mar 25 11:38 a.out11585 Mar 25 11:38 a.out5.5.5.5.$a.out$a.out$a.out$a.out 执行程序,发现程序的执行程序,发现程序的执行程序,发现程序的执行程序,发现程序的euideuideuideuid已经改变已经改变已经
25、改变已经改变uiduiduiduid=1028,=1028,=1028,=1028,euideuideuideuid=0=0=0=0 Exec函数使用说明(三)vLinuxLinux调用调用execexec的两个时机的两个时机vv每当有进程认为自己不能为系统和用户做出任何贡献了,每当有进程认为自己不能为系统和用户做出任何贡献了,就可以调用任何一个就可以调用任何一个execexec;vv或者一个进程想执行另一个程序,它就可以或者一个进程想执行另一个程序,它就可以forkfork出一个新出一个新进程,然后进程,然后立即立即调用任何一个调用任何一个execexec,这样看起来就好像这样看起来就好像通
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 教学课件 教学 课件 第四 LINUX 进程 控制
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内