UNIX(或 LINUX)中的退出和等待函数

exit and wait function in UNIX (or LINUX)

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

  1. 来自unix.org

    The wait() function will suspend execution of the calling thread until status information for one of its terminated child processes is available, or until delivery of a signal whose action is either to execute a signal-catching function or to terminate the process

Let's imagine there is process A with two child processes B and C. If B and C call the exit function, and then A calls the wait function, which exit status will be retrieved? The one from B or the one from C? Which first and why?

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

3.Are对于在 UNIX 中何时可以正常终止进程有什么限制吗?

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

  1. wait() returns 退出的任何子进程的 PID。如果有两个退出,则必须调用 wait() 两次并检查返回的 PID。你不应该依赖订单。
  2. 正确,整个目的 wait()(没有 WNOHANG 选项)是阻止。所以你在等待过程中除了处理信号外不能做任何其他事情。
  3. 我不确定你在这里的确切意思,但我怀疑答案主要是 "no."
  4. 用户无法终止根进程(至少在没有特殊配置的情况下不能)。用户也不能终止其他用户拥有的进程。
  1. 不确定先报B还是C。

  2. 当进程处于wait()时,它不能做任何事情(在单线程进程中)。

  3. 大部分没有限制。有不可中断的系统调用,但系统尽量避免让进程挂在里面。

  4. 否;用户可以杀死自己的进程。用户 root 可以杀死其他人的进程(一般情况下);但是没有其他人可以杀死 root 的进程。