zoukankan      html  css  js  c++  java
  • 深入理解计算机系统 第八章 异常控制流(2)

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

    运行。进程要么在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)的用户层函数捕获这个信号。
     
  • 相关阅读:
    POJ3189 Steady Cow Assignment(二分图多重匹配)
    POJ2112 Optimal Milking(二分图多重匹配)
    POJ2289 Jamie's Contact Groups(二分图多重匹配)
    安装jhipster
    AngularJS版本下载
    业务平台技术架构一些注意事项
    反向数据库表
    近期需要关注的内容
    一些不太常见但很有用的java类
    文件复制
  • 原文地址:https://www.cnblogs.com/zhishuiyushi/p/11794832.html
Copyright © 2011-2022 走看看