Linux编程与应用课件:07第07章 Linux进程管理与程序开发.ppt

上传人(卖家):罗嗣辉 文档编号:2046025 上传时间:2022-01-21 格式:PPT 页数:47 大小:1.15MB
下载 相关 举报
Linux编程与应用课件:07第07章 Linux进程管理与程序开发.ppt_第1页
第1页 / 共47页
Linux编程与应用课件:07第07章 Linux进程管理与程序开发.ppt_第2页
第2页 / 共47页
Linux编程与应用课件:07第07章 Linux进程管理与程序开发.ppt_第3页
第3页 / 共47页
Linux编程与应用课件:07第07章 Linux进程管理与程序开发.ppt_第4页
第4页 / 共47页
Linux编程与应用课件:07第07章 Linux进程管理与程序开发.ppt_第5页
第5页 / 共47页
点击查看更多>>
资源描述

1、第7章进程环境及进程属性 进程环境及进程属性进程环境及进程属性 进程管理及控制进程管理及控制 Linux特殊进程特殊进程 2022-1-202进程资源 2022-1-203进程状态 2022-1-204进程基本属性 -进程号(PID) 2022-1-205父进程号(PPID) 2022-1-206进程组号(PGID) 进程组是一个或多个进程的集合。它们与同一作业相关联,可以接受来自同一终端的各种信号(关于信号的概念参阅第8章)。每个进程组都有唯一的进程组号,进程组号是可以在用户层修改的。 2022-1-207会话 会话(session)是一个或多个进程组的集合。系统调用函数getsid()用来

2、获取某个进程的会话号SID。如果调用此函数的进程不是一个进程组的组长,则此函数会创建一个新会话: 该进程变成新会话首进程(session leader),会话首进程是创建该会话的进程。 该进程成为一个新进程组的组长进程。新进程组PGID是该调用进程的PID。 该进程没有控制终端。如果在调用setsid之前该进程就有一个控制终端,那么这种联系也会被中断。 2022-1-208控制终端 会话和进程组有以下一些特点:(1)一个会话可以有一个控制终端,建立与控制终端连接的会话首进程被称为控制进程。(2)一个会话中的几个进程组可被分成一个前台进程组和几个后台进程组,如果一个会话有一个控制终端,则它有一个

3、前台进程组。(3)无论何时键入终端的中断键(DELETE或Ctrl+C),就会将中断信号发送给前台进程组的所有进程,无论何时键入终端的退出键(Ctrl+),就会将退出信号发送给前台进程组的所有进程,如果终端检测到调制解调器(或网络)已经断开连接,则将挂断信号发送给控制进程(会话首进程)。2022-1-209终端处理函数2022-1-2010进程用户属性 进程真实用户号(RUID) 真实用户组号(RGID)有效用户号(EUID)有效用户组号(EGID) 2022-1-2011进程真实用户号(RUID) 2022-1-2012进程有效用户号(EUID) EUID主要用于权限检查。多数情况下,EUI

4、D和UID相同。如果可执行文件的setuid位有效,在除该文件的拥有者之外的用户运行该程序时,EUID和UID则不相同。即当某可执行文件设置了setgid位(见文件属性章节介绍)后,任何用户(包括root用户)运行此程序时,其有效用户组EUID为该文件的拥有者。 2022-1-2013普通用户能够修改自己的密码的原因 /etc/passwd文件用来存储所有用户信息,任何用户都可以修改自己的密码,显然,其它用户在执行/usr/bin/passwd命令时修改了/etc/passwd文件(并不是说可以使用vi编辑器修改),但是,通过查看/etc/passwd文件的权限,发现普通用户对此文件仅有读的权

5、限。是什么原因导致普通用户可以修改/etc/passwd文件呢?这是因为用户执行“/usr/bin/passwd”命令时,/usr/bin/passwd文件设置了setuid位,在执行此程序(/usr/bin/passwd)时,该用户所拥有的权限等同于文件“/usr/bin/passwd”的拥有者root的权限,而root用户拥有对/ect/passwd文件写的权限,因此普通用户可以通过/usr/bin/passwd来修改/etc/passwd文件的内容。如果清除掉“/usr/bin/passwd”文件的setuid权限位,普通用户就不能修改自己的密码了。 2022-1-2014进程用户组号(

6、GID) 创建进程的用户所在的组号为该进程的进程用户组号(GID)。可以通过调用getgid()函数来获得当前进程的真实用户组号(GID)。 2022-1-2015有效进程用户组号(EGID) 第7章进程环境及进程属性 进程环境及进程属性进程环境及进程属性 进程管理及控制进程管理及控制 Linux特殊进程特殊进程 2022-1-2017创建进程 fork函数调用成功后,其子进程会复制父进程的几乎所有信息(除PID等信息),主发复制父亲进程的代码段、数据段、BSS、堆、栈(关于进程结构参阅本书第3章)、打开的文件描述符(但共用同一个文件表项)。另外,子进程从父进程继承下列属性:实际用户/组号、有

7、效用户/组号以及保留的用户/组号、进程组号、环境变量、对文件的执行时关闭标志、信号处理方式设置、信号掩码、当前工作目录、根目录、文件模式创建掩码、文件大小限制等信息。2022-1-2018示例2022-1-2019对打开文件的处理 2022-1-2020验证fork是否在子进程复制验证代码验证数据段(使用全局、静态初始化变量),BSS段(未初始化全局,静态变量),栈(局部变量),堆(malloc返回空间)。代码见教材。2022-1-2021vfork /* Clone the calling process, but without copying the whole address spac

8、e. The calling process is suspended until the new process exits or is replaced by a call to execve. Return -1 for errors, 0 to the new process, and the process ID of the new process to the old process. */extern _pid_t vfork (void) ;#endif 2022-1-2022Vfork与fork比较验证代码见教材代码。2022-1-2023execX函数执行新代码2022-

9、1-2024execX函数比较函数使用文件名使用路径名使用参数表(函数出现字母l)使用argv(函数出现字母v) execl execlp execle execvexecvp execve2022-1-2025执行新代码对打开文件的处理 在执行exec系列函数时,默认情况下,新代码对于可以使用在原来代码中打开的文件描述符,即执行exec系列函数时,并不关闭原来的文件描述符。 但如果调用fcntl函数即关闭FD_CLOEXEC项,则在执行execX系列函数后将关闭原来打开的文件描述符。 2022-1-2026等待进程结束 调用wait()函数的父亲进程将等待该进程的任意一个子进程结束后才继续执

10、行(如果有多个子进程,只需要等待其中的一个进程)。 2022-1-2027waitpid2022-1-2028退出进程 可以通过以下方式结束进程。 向exit或_exit发布一个调用。 在main函数中执行return。 隐含的离开main函数。2022-1-2029函数说明2022-1-2030示例代码2022-1-2031exit 与_exit2022-1-2032exit与return的区别 C语言关键字与函数exit()在main函数退出时有相似之处,但两者有本质的区别:return 退出当前函数主体,exit()函数退出当前进程,因此,在main函数里面return(0)和exit(

11、0)完成一样的功能。return仅仅从子函数中返回,而子进程用exit()退出,调用exit()时要调用一段终止处理程序,然后关闭所有I/O流。2022-1-2033示例代码2022-1-2034修改进程用户相关信息 access核实用户权限 2022-1-2035设置进程真实用户RUID 2022-1-2036设置进程有效用户EUID 第7章进程环境及进程属性 进程环境及进程属性进程环境及进程属性 进程管理及控制进程管理及控制 Linux特殊进程特殊进程 2022-1-2038守候进程 守护进程(Daemon)是运行在后台的一种特殊进程,其脱离于终端,之所以脱离于终端是为了避免进程被任何终端

12、所产生的信息所打断,其在执行过程中的信息也不在任何终端上显示。守候进程周期性地执行某种任务或等待处理某些发生的事件,Linux的大多数服务器就是用守护进程实现的。比如,Internet服务器inetd,Web服务器httpd等。一般情况下,守护进程可以通过以下方式启动: 在系统启动时由启动脚本启动,这些启动脚本通常放在/etc/rc.d目录下; 利用inetd超级服务器启动,如telnet等; 由cron定时启动以及在终端用nohup启动的进程也是守护进程。2022-1-2039守护进程编程要点 2022-1-2040守护进程编程要点2022-1-2041守护进程编程要点2022-1-2042日志信息及其管理 2022-1-2043建立与日志守候进程联系 2022-1-2044openlog() 2022-1-2045写日志信息 2022-1-2046守候进程应用示例 见教材代码。2022-1-2047孤儿进程与僵死进程 因父亲进程先退出而导致一个子进程被init进程收养的进程为孤儿进程。而已经退出但还没有回收资源的进程为僵死进程。 示例代码见教材。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 大学
版权提示 | 免责声明

1,本文(Linux编程与应用课件:07第07章 Linux进程管理与程序开发.ppt)为本站会员(罗嗣辉)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|