【问题标题】:In which case will the conditional code be executed? [closed]什么情况下会执行条件代码? [关闭]
【发布时间】:2021-12-25 00:18:27
【问题描述】:

什么情况下会执行条件代码?

ret = fork ();
if (ret == getpid ()) {
       / * CODE * /
}```

Only the child process or never?

【问题讨论】:

  • 看起来像家庭作业。提示:fork 为子进程返回什么? getpid() 返回什么?
  • fork 永远不会返回您所在进程的 pid。那将毫无用处。见fork() returns 0, but the child process getpid()!=0. Why?
  • 我知道 fork 是如何工作的,但总的来说我不知道​​ getpid() 返回的值是否取决于你在哪里使用它。在子进程中,您可以使用 getppid() 获取父进程的 pid,但我不知道这里返回的是子进程还是父进程的 pid
  • @Rojina getpid 总是返回你所在进程的 pid。总是。它的行为不会因您调用它的方式而有所不同,例如基于您是否只是调用fork。为什么会呢?怎么可能? (无论如何,所有进程——除了 pid 1——都是子进程,这是因为有人,他们的父级,称为fork。同样,请阅读this question 及其答案。)跨度>
  • 好的,谢谢,那么答案永远不会在子进程中 ret 是 0 并且 getpid 返回子进程的 pid 不是 0 而在父进程中 ret 是子进程getpid 返回父进程的 pid

标签: c process operating-system signals fork


【解决方案1】:

在父进程中,fork 返回子进程的 ID 或 -1(如果出错)。 getpid 返回调用它的进程的 ID。它们永远不相等,因为父进程的 ID 与子进程的 ID 不同(并且不同于 -1)。

在子进程中,fork 返回 0。getpid 返回调用它的进程的 ID。它们永远不会相等,因为子进程的 ID 永远不会是 0。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-07
    • 2011-05-03
    • 2019-11-13
    • 1970-01-01
    • 1970-01-01
    • 2012-12-30
    • 1970-01-01
    相关资源
    最近更新 更多