ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

深入理解计算机系统 第八章 异常控制流(2)

2019-11-04 21:01:45  阅读:212  来源: 互联网

标签:计算机系统 调用 控制流 第八章 终止 内核 信号 进程 waitpid


进程总是处于下面三种状态之一:

运行。进程要么在CPU上执行,要么在等待被执行且最终会被内核调度。 停止。进程的执行被挂起(suspended),且不会被调度。 终止。进程永远的停止了。进程会因为三种原因终止:1)收到一个信号,该信号的默认行为是终止进程,2)从主程序返回,3)调用exit函数。 父进程通过调用fork函数创建一个新的运行的子进程。 fork函数的特点: 调用一次,返回两次。fork函数被父进程调用一次,但是却返回两次-----一次是返回到父进程,一次是返回到新创建的子进程。 当一个进程由于某种原因终止时,内核并不是立即把它从系统中清除。相反,进程被保持在一种已终止的状态中,直到被它的父进程回收(reaped)。当父进程回收已终止的子进程时,内核将子进程的退出状态传递给父进程,然后抛弃已终止的进程,从此时开始,该进程就不存在了。一个终止了但还未被回收的进程称为僵死进程(zombie)。 一个进程可以通过调用waitpid函数来等待它的子进程终止或者停止。 waitpid函数默认情况下(当options=0时),挂起调用进程的执行,直到它的等待集合(wait set)中的一个子进程终止。如果等待集合中的一个进程在刚调用的时刻就已经终止了,那么waitpid就立即返回。在这两种情况下,waitpid返回导致waitpid返回的已终止子进程的PID。此时,已终止的子进程已经被回收,内核会从系统中删除掉它的所有痕迹。 传送一个信号到目的进程是由两个不同步骤组成的: 发送信号。内核通过更新目的进程上下文中的某个状态,发送(递送)一个信号给目的进程。发送信号可以有如下两种原因:1)内核检测到一个系统事件,比如除零错误或者子进程终止。2)一个进程调用了kill函数,显式的要求内核发送一个信号给目的进程。一个进程可以发送信号给它自己。 接收信号。当目的进程被内核强迫以某种方式对信号的发送做出反应时,它就接收了信号。进程可以忽略这个信号,终止或者通过执行一个称为信号处理程序(signal handler)的用户层函数捕获这个信号。  

标签:计算机系统,调用,控制流,第八章,终止,内核,信号,进程,waitpid
来源: https://www.cnblogs.com/zhishuiyushi/p/11794832.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有