【问题标题】:wait() system call - does the child ignore this?wait() 系统调用 - 孩子会忽略这个吗?
【发布时间】:2013-04-20 08:52:15
【问题描述】:

所以我在修订期间看到了以下代码。我知道 wait() 会导致父母等待孩子停止,但我对此有一些疑问。

首先,当孩子被创建时,我的假设是否得到纠正,即父母继续,改变 x 值,然后在 if 语句之后等待?

其次,当孩子继续执行并开始等待()时,会发生什么?这是否因为没有什么可等待而被忽略?

       #include <sys/types.h>
       #include <stdio.h>
       #include <unistd.h>
       int main() {
         int x = 1;
          pid_t pid = fork();
         if (pid == 0) {
             x = x * 2;
         } else if (pid > 0) {
             x = 3;
         }
         wait();
         // Print the value of x to the console
         printf("%d\n",x);
       }

【问题讨论】:

  • 你试过了吗?程序是否似乎挂起(关于您的第二个问题)?
  • 是的(关于您的第一个问题)。
  • wait() 的声明是pid_t wait(int *stat_loc),虽然允许传递 0 或 NULL 来代替指针,但您必须传递一些东西作为参数。当然,您需要包含#include &lt;sys/wait.h&gt; 以使编译器能够警告您——但您不应该编译代码以便可以使用范围内没有原型的函数。在当前的 POSIX 系统上,您不需要 #include &lt;sys/types.h&gt;(它会自动包含在内;在原始 POSIX — 1988、1990 中是必需的)。

标签: c concurrency wait system-calls


【解决方案1】:

您可以尝试在子执行开始时调用 wait()。一旦在这个过程中没有子进程,调用就会被简单地忽略。

【讨论】:

    猜你喜欢
    • 2012-02-09
    • 1970-01-01
    • 1970-01-01
    • 2022-11-24
    • 2018-08-28
    • 1970-01-01
    • 2016-12-29
    • 1970-01-01
    • 2011-07-10
    相关资源
    最近更新 更多