第六章进程控制.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
2.进程的控制 构造一个简单的shell解释程序 有了fork(),exec()和wait()调用,可以很容易构造一个简单的交互式shell。 给出提示符,从键盘输入命令,执行输入的命令。等待命令执行完毕之后shell再给出提示符才允许输入下一条命令。 * 3.守护进程 什么是守护进程 守护进程(daemon)是生存期长的一种进程,它们常在系统引导装入时启动,在系统关闭时终止; 因为没有控制终端,守护进程是在后台运行的; 守护进程常常用作为服务器进程; * * ps -axj 第六章 进程控制 1.进程的建立与运行 进程标识 每个进程都有一个非负整型的唯一进程ID。 * 一些特殊进程: 进程ID 0 调度进程,常常被称为交换进程; 进程ID 1 通常是init进程,在启动时由内核调用; * 1.进程的建立与运行 获取进程信息 * #include sys/types.h #include unistd.h pid_t getpid(void); 返回:调用进程的进程ID pid_t getppid(void); 返回:调用进程的父进程ID uid_t getuid(void); 返回:调用进程的实际用户ID uid_t geteuid(void); 返回:调用进程的有效用户ID gid_t getgid(void); 返回:调用进程的实际组ID gid_t getegid(void); 返回:调用进程的有效组ID 没有出错返回 1.进程的建立与运行 创建新进程 * #include sys/types.h #include unistd.h pid_t fork(void); 调用一次,返回两次:在子进程中返回0;在父进程中返回子进程的进程ID; 出错则返回-1 1.进程的建立与运行 创建新进程 * 为什么子进程中只需返回0,而无需返回父进程的进程ID? 子进程中可以调用getppid()函数来获得父进程的进程ID 为什么在父进程中要返回子进程的进程ID? 一个父进程可能有多个子进程,所以在调用fork()函数创建新进程是就需要保存新创建的子进程的进程ID 1.进程的建立与运行 创建新进程 子进程和父进程继续执行fork()之后的命令; 子进程是父进程的复制品,子进程获得父进程的数据空间、堆、栈的复制品; 现在很多的实现并不做一个父进程数据段和堆的完全copy,只对需要修改的数据段或堆进行copy; * * 1.进程的建立与运行 创建新进程 一般来说,在fork()之后是父进程先执行还是子进程先执行是不确定的,这取决与内核使用的调度算法; * 1.进程的建立与运行 父、子进程对打开文件的共享 * 1.进程的建立与运行 父、子进程对打开文件的共享 在fork()之后处理文件描述符有两种常见的情况: 1. 父进程等待子进程完成; 2. 父、子进程各自执行不同的程序段,父、子进程各自关闭不需要使用的文件描述符,而不干扰对方使用的文件描述符。这在网络服务进程中进程使用。 * 1.进程的建立与运行 fork()失败 使fork()失败的主要原因: 1. 系统已经有了太多的进程,资源不够; 2. 实际用户ID的进程总数超过了系统限制; * 1.进程的建立与运行 何时需要使用fork()? 1. 一个进程希望复制自己,使父、子同时执行不同的代码段,这在网络服务进程中最常见; 2. 一个进程要执行一个不同的程序,这对shell是常见的情况,子进程从fork()返回后立即调用exec()来执行另一个程序; * 2.进程的控制 进程的终止 正常终止: 1. 在main()函数内执行return语句; 2. 调用exit()函数; 3. 调用_exit()系统调用函数,此函数由exit()调用,处理UNIX特定的细节; 异常终止: 1. 调用abort(),它产生SIGABRT信号; 2. 当进程接收到某个信号时;(指针越界,除0错误等) * 2.进程的控制 进程的终止 对于任何一种终止情形,最后都会执行内核中的同一段代码,来为相应进程关闭所有打开的文件描述符,释放所有的寄存器等等; 对于正常终止,可以通过获取退出状态参数(exit status)来实现; 对于异常终止,内核会产生一个指示其异常的终止状态; * 2.进程的控制 进程的终止 对于任意一种进程终止状态,父进程都希望子进程能够通知它是如何终止的,父进程能够用wait()或waitpid()函数取得其终止状态; 一个已经终止的,但是其父进程尚未对其进行善后处理(如获取子进程的有关信息、释放它仍占用的资源)的进程被称

文档评论(0)

aiwendang + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档