UNIX(或LINUX)中的退出和等待功能

UNIX(或LINUX)中的退出和等待功能,linux,unix,process,operating-system,exit,Linux,Unix,Process,Operating System,Exit,我正在编写一个模拟基于unix的操作系统的程序,我有一些问题: 来自unix.org wait()函数将挂起调用线程的执行 直到其一个终止的子进程的状态信息可用,或者直到其操作是执行信号捕获功能或终止进程的信号发出为止 让我们设想有一个进程A,它有两个子进程B和C。如果B和C调用退出功能,然后A调用等待功能,将检索哪个退出状态?是来自B的还是来自C的?首先是哪一个?为什么 2.当进程处于等待状态时,它不会执行其代码,例如,直到其中一个终止的子进程的状态信息可用,对吗? 例如,它不能在等待时调用

我正在编写一个模拟基于unix的操作系统的程序,我有一些问题:

  • 来自unix.org

    wait()函数将挂起调用线程的执行 直到其一个终止的子进程的状态信息可用,或者直到其操作是执行信号捕获功能或终止进程的信号发出为止
  • 让我们设想有一个进程A,它有两个子进程BC。如果BC调用退出功能,然后A调用等待功能,将检索哪个退出状态?是来自B的还是来自C的?首先是哪一个?为什么

    2.当进程处于等待状态时,它不会执行其代码,例如,直到其中一个终止的子进程的状态信息可用,对吗? 例如,它不能在等待时调用fork函数,对吗

    3.在UNIX中通常可以终止进程的时间是否有任何限制

    3.a。用户是否有权终止根进程?(所有根进程都是随意的?)

  • wait()
    返回退出的任何子进程的PID。如果有两个已退出,则必须调用
    wait()
    两次并检查返回的PID。你不应该依赖订单
  • 正确,整个
    wait()
    (不带
    WNOHANG
    选项)的目的就是阻止。因此,在等待过程中,除了处理信号外,你不能做任何其他事情
  • 我不确定你在这里的确切意思,但我怀疑答案大多是“不”
  • 用户无法终止根进程(至少,没有特殊配置时是这样)。用户也不能终止其他用户拥有的进程
  • 不确定是先报告B还是C

  • 当进程处于
    wait()
    中时,它不能执行任何其他操作(在单线程进程中)

  • 大多数情况下没有限制。存在不可中断的系统调用,但系统会尝试避免进程挂起

  • 没有;用户可以终止自己的进程。用户
    root
    可以杀死其他人的进程(通常);但是没有其他人可以杀死
    root
    的进程

  • waitpid()
    和拥有
    WNOHANG
    选项的朋友;普通
    wait()
    不会。