Parent-> fork
------------1st Child(A)-> fork again
-------------------->1st Child's Child(Aa)
如果我是父母,如何在C程序中获取孩子的孩子(Aa(pid?或者如何获取该组中的所有 pid?
对于父 pid ( getppid()
(,没有直接的方法可以获取子 pid ,但是...
fork()
返回以下三个值之一:子 pid、0 和 -1。
- 子 PID 将返回给父项。
- 0 在父级代码中返回给子级。
- 当
fork()
出现错误时返回 -1。
。所以你已经有了孩子在他们fork()
之前和之后的PID。 例如,如果您希望子 pid 在 execl
之后,最简单的方法是在它被 fork()
返回时挂在它上面,即;存储它。
如果这对你来说不够有效,正如评论者评论的那样,你可以设置一两个pipe()
来将其传达回父母。
int io[2];
pipe(io);
io[0]
在; io[1]
出来了。您将使用write()
和read()
。
下面是一个使用pipe与sons对应的小例子:
#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:%ldtme:%ldtson:%ldn",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;
}