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

使用C从父进程获取子进程ID,c,process,fork,pid,C,Process,Fork,Pid,我正试图写一个C程序,其中我有一个父母可以创建两个孩子 我的任务是检索父级和两个子级的进程ID。为此,我一直在使用getpid() 现在我被要求从父母那里得到孩子的信息。我不知道该怎么做。例如,如何从父级获取子级的处理ID 我现在有这个(简化) fork1=fork(); 如果(1

我正试图写一个C程序,其中我有一个父母可以创建两个孩子

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

现在我被要求从父母那里得到孩子的信息。我不知道该怎么做。例如,如何从父级获取子级的处理ID

我现在有这个(简化)

fork1=fork();
如果(1<0)
分叉错误
else if(fork1==0){
儿童1
使用getpid()
使用getppid()
}否则{
fork2=fork();
if(fork2<0)
分叉错误
else if(fork2==0){
儿童2
使用getpid()
使用getppid()
}否则
再次为人父母
}

在谷歌搜索了一分钟后,我找到了一个页面,上面写着您需要的所有内容:

系统调用fork()用于创建进程。它不接受任何参数并返回进程ID

我突出显示了对您很重要的部分,因此您不需要做任何事情来获取子进程ID。您已经在
fork1
fork2
中找到了它们

下面是一些从父级和子级打印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;
}
#包括
int main(){
int fork1=fork();
如果(1<0){
printf(“错误\n”);
}else if(fork1==0){
printf(“我是孩子1\n”);
printf(“子1:父:%i\n”,getppid());
printf(“子1:我的pid:%i\n”,getpid());
}否则{
int-fork2=fork();
if(fork2<0){
printf(“错误\n”);
}else if(fork2==0){
printf(“我是孩子2\n”);
printf(“子2:父:%i\n”,getppid());
printf(“子2:我的pid:%i\n”,getpid());
}否则{
printf(“我是父母”);
printf(“PID为:\n”);
printf(“父项:%i\n”,getpid());
printf(“子1:%i\n”,fork1);
printf(“子2:%i\n”,fork2);
}
}
返回0;
}

fork()返回两个不同的值,它向子进程返回零,向父进程返回非零正值,该值是子进程ID,因此在上一个else中,fork1是child1的pid,fork2是child2的pid。

调用父进程时fork()不返回子进程的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;
}