Parent-> fork
------------1st Child(A)-> fork again
-------------------->1st Child's Child(Aa)
如果我是父母,如何在C程序中获取孩子的孩子(Aa)pid? 或者如何获得这个组中的所有pid?
答案 0 :(得分:2)
对于父pid(getppid()
),但 ...
fork()
返回以下三个值之一:child pid,0和-1。
fork()
有错误时,会返回 ...所以你已经在fork()
之前和之后拥有了孩子(rens)pid。例如,如果你想在execl
之后想要孩子pid,那么最简单的方法就是在fork()
返回时坚持它,即;存储它。
如果这对您来说效率不高,那么有可能,正如评论者评论的那样,您可以设置一个pipe()
或两个用于将其传回给父母。
int io[2];
pipe(io);
io[0]
在; io[1]
已经出局。您可以使用write()
和read()
。
答案 1 :(得分:1)
这是一个使用管道与儿子对应的小例子:
#include <stdio.h>
#include <signal.h>
#include <unistd.h>
int main(int argc, char *argv[])
{
pid_t ppid,pid,spid;
int io[2];
pipe(io);
if((pid=fork())>0){//father
close(io[1]);
read(io[0],&spid,sizeof(pid_t));
ppid = getpid();
printf("father:%ld\tme:%ld\tson:%ld\n",ppid,pid,spid);
}if(pid==0){//me
close(io[0]);
pid = getpid();
ppid
= getppid();
if((spid=fork())>0){//me
}else if(spid==0){//son
spid = getpid();
write(io[1],&spid,sizeof(spid));
}
}
return 0;
}