【问题标题】:What happens to status variable in various situations of wait(&status) system call?在 wait(&status) 系统调用的各种情况下,status 变量会发生什么?
【发布时间】:2016-07-30 03:12:23
【问题描述】:

(1) 假设主进程调用fork(),它返回-1,所以进程没有子进程。 在主进程中调用wait(&status) 之后,根据手册,它将返回-1。 'status' 变量是否会保持不变,就像调用之前一样?

(2) 遇到(1)中的这种情况,如果在wait(&status)行之后,有一行status = WEXITSTATUS(status),那么'status'变量会改变吗?

int status = 0;
  if (fork()!=0) {
  wait(&status);
  status = WEXITSTATUS(status);
}

【问题讨论】:

  • 这些问题很有趣;除了在这里发帖之外,您还做了什么来尝试回答这些问题?
  • 搜索谷歌,offcourse :) 因为我不能对这种情况进行模拟,所以我在问。人的具体行为没有什么特别的。
  • 我不明白这个问题。语法问题。
  • 如果函数失败,状态变量将不会被修改,这似乎很直观,但我在pubs.opengroup.org/onlinepubs/9699919799/functions/waitpid.html 没有看到任何明确说明的内容。语言律师可能会对此感到满意。
  • 出于实用目的,您可以轻松测试当前系统的行为方式。继续在没有孩子的新流程中致电wait。它无法区分一个因为 fork 失败而没有子进程的进程,一个因为从未调用 fork 而没有子进程的进程,以及一个因为它们已经退出(并被前一个进程清理)而没有子进程的进程。等等)

标签: c operating-system fork wait


【解决方案1】:

1:未定义的行为。如果 waitpid 失败,不保证状态不变

2:是的,状态 = WEXITSTATUS(状态);将替换状态中的值。 (具体来说,WEXITSTATUS 应该屏蔽掉值的所有高位)

【讨论】:

    猜你喜欢
    • 2014-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-22
    • 1970-01-01
    • 2017-08-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多