【问题标题】:Fork function doesn't return 0 value?Fork 函数不返回 0 值?
【发布时间】:2025-12-05 22:00:02
【问题描述】:

当我在 main 中调用 fork() 时,子进程 ID 没有得到 0 值。 我的代码:

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/wait.h>

int main(){


    pid_t pid = fork();
    printf("pid in child=%d and parent=%d\n",getpid(),getppid());       
    wait(NULL);

}

还有输出:

pid in child=15690 and parent=11593
pid in child=15691 and parent=15690

问题出在哪里?据我所知,我应该在第二行获得子进程的 0 值。

【问题讨论】:

  • fork 返回的 pid 在子进程中为零。孩子和父母都有pid,但孩子可能不需要知道自己的。

标签: c shell unix fork pid


【解决方案1】:

您实际上应该在您的printf 语句中使用pid 的值。

fork() 的结果对于 fork 进程来说是零,但是通过getpid() 获得的它的进程 id 不是零。

【讨论】:

    【解决方案2】:

    $ 人 getpid

    getpid() 返回调用进程的进程ID。

    $ 人叉

    返回值
    成功时,父进程返回子进程的PID,子进程返回0。

    你打印的是真正的 PID,就像在 ps 命令中一样

    【讨论】: