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)的用户层函数捕获这个信号。
     
  • 相关阅读:
    计算机网络学习资料
    操作系统学习资料
    2020 Multi-University Training Contest 6 1005 Fragrant numbers(区间dp)
    2020 Multi-University Training Contest 6 1010 Expectation(矩阵树定理)
    2020 Multi-University Training Contest 4 1012 Last Problem(01背包)
    2020 Multi-University Training Contest 4 1012 Last Problem(构造)
    2020 Multi-University Training Contest 4 1007 Go Running(网络流)
    2020 Multi-University Training Contest 3 1006 X Number
    静态网页开发基础
    包装类
  • 原文地址:https://www.cnblogs.com/zhishuiyushi/p/11794832.html
Copyright © 2011-2022 走看看