使用C从父级获取子进程ID

时间:2014-12-17 17:49:36

标签: c process fork pid

我正在尝试编写一个C程序,其中我有一个父项创建了两个孩子。

我的任务是检索父项和两个子项的进程ID。为此,我一直在使用getpid()

现在我被要求从父母处获取子信息。我不知道如何做到这一点。我怎样才能从父母那里获得孩子的处理ID?

我现在有这个(简化)

fork1 = fork();

if (fork1 < 0)
    fork error
else if (fork1 == 0) {
    child 1
    use getpid()
    use getppid()
} else {
    fork2 = fork();

    if (fork2 < 0)
        fork error
    else if (fork2 == 0) {
        child 2
        use getpid()
        use getppid()
    } else 
        parent again
}

2 个答案:

答案 0 :(得分:1)

经过一分钟的Google搜索后,我找到了this页面,其中包含您需要的所有内容:

  

系统调用fork()用于创建进程。它不需要参数并返回进程ID

我突出显示了对您而言重要的部分,因此您无需做任何事情来获取子项的进程ID。您已将它们放在fork1fork2

以下是一些代码,用于打印来自父级和子级的PID。

#include <stdio.h>

int main() {
  int fork1 = fork();
  if (fork1 < 0) {
    printf("error\n");
  } else if (fork1 == 0) {
    printf("I'm child 1\n");
    printf("child 1: parent: %i\n", getppid());
    printf("child 1: my pid: %i\n", getpid());
  } else {
    int fork2 = fork();
    if (fork2 < 0) {
      printf("error\n");
    } else if (fork2 == 0) {
      printf("I'm child 2\n");
      printf("child 2: parent: %i\n", getppid());
      printf("child 2: my pid: %i\n", getpid());
    } else {
      printf("I'm the parent\n");
      printf("The PIDs are:\n");
      printf("parent: %i\n", getpid());
      printf("child 1: %i\n", fork1);
      printf("child 2: %i\n", fork2);
    }
  }
  return 0;
}

答案 1 :(得分:0)

fork()返回两个不同的值,它向子元素返回零并向父元素返回非零正值,这个值是子进程ID,所以在你的最后一个方法中,fork1是child1和fork2的pid是孩子的pid2。