我正在尝试编写一个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
}
答案 0 :(得分:1)
经过一分钟的Google搜索后,我找到了this页面,其中包含您需要的所有内容:
系统调用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;
}
答案 1 :(得分:0)
fork()返回两个不同的值,它向子元素返回零并向父元素返回非零正值,这个值是子进程ID,所以在你的最后一个方法中,fork1是child1和fork2的pid是孩子的pid2。