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