【问题标题】:what the output of this code and why?这段代码的输出是什么,为什么?
【发布时间】:2016-04-13 18:47:54
【问题描述】:

我想问一下这段代码有没有可能打印190?

父亲 pid =9 孩子 pid = 10 . . .

pid_t pid = fork();

if (pid<0)
{ 
    exit(1);
}
else if (pid>0)
{
    printf("%d",getpid());
    exit(0);
}
else
{
    char *const argv[] = {"sleep","1",NULL};
    execv("/bin/sleep", argv);
    printf("%d",getpid());
}

【问题讨论】:

  • exit)0(?请务必在发帖前检查您的输入。
  • /proc/sys/kernel/sched_child_runs_first 的值是多少?
  • @MarkPlotnick,我认为这不是重点。问题似乎是父母和孩子的一个printf()调用的输出是否可以混合在一起。
  • 问题是如果执行失败,屏幕上的输出会是什么
  • 那么在您的示例代码中包含execv() 调用的目的是什么?您认为 execv() 失败与根本不被调用有什么区别?

标签: c linux fork


【解决方案1】:

尽管有可能,子 pid 不太可能是 190 这样低的数字。

父 pid 为 9 而子 pid 为 10 几乎是不可能的,因为系统启动时会生成比这更大的 pid 值。

【讨论】:

    【解决方案2】:

    在子进程中,如果 execv 成功,它将永远不会返回。这会导致 printf() 不被执行。您看到的“190”仅来自打印自己的 pid 的父级。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-20
      • 1970-01-01
      • 2018-01-08
      • 1970-01-01
      • 1970-01-01
      • 2023-03-28
      • 2020-02-14
      • 1970-01-01
      相关资源
      最近更新 更多