c - 使用 fork() 在子进程中未获取适当的父 ID

标签 c linux fork

我正在尝试使用fork()获取子进程中的父ID。但是,我没有得到正确的家长 ID。有时我这样做,有时我不这样做。我的 printf 打印 1 作为父 ID。这是我的代码片段。谁能解释一下原因。

for(i = 1 ; i <= n ; i++){      
    if((pid = fork()) == 0){
        printf("Parent id is %u\n", getppid()) ;            
        break ;
    }
}  

最佳答案

ID为1的进程是init进程。 top -p 1 的输出(在我的 Ubuntu 机器上):

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND             
    1 root      20   0 24732 2704 1376 S    0  0.0   0:00.93 init                

如果进程被孤立,则 init流程采用orphaned process ,并且 getppid() 将在孤立进程中返回 1。在您的情况下,有时,在子进程调用 getppid() 之前,父进程必须退出。

关于c - 使用 fork() 在子进程中未获取适当的父 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22664986/

相关文章:

c# - 从 Windows 可执行文件中识别编译器版本

c - C中 block 作用域和函数作用域的区别

c++ - ARM 动态链接

java - Linux 和 Windows 上的 Jasper 是否有通用的字体格式来生成 pdf?

c - 通过 execve 从 child 调用的排序不会自然终止

posix - 管道、 fork 和​​非阻塞 IPC

c++ - 启用和禁用 USB 端口

c - while 循环使用 scanf 重复读取的字符数

c - "creat"Unix系统调用

c - 理解Linux中的fork()