[英]C Program - How to get child's child pid in a parent [After fork]
Parent-> fork
------------1st Child(A)-> fork again
-------------------->1st Child's Child(Aa)
如果我是父母 ,如何在C程序中获得孩子的孩子(Aa)pid? 或者如何获得该组中的所有pid?
对于父pid( getppid()
),没有直接获得子pid的方法, 但 ......
fork()
返回三个值之一:child pid,0和-1。
fork()
有错误时返回-1。 ...所以你已经在fork()
之前和之后拥有了孩子(rens)pid(s fork()
。 例如,如果你想在execl
之后使用pid,最简单的方法就是在fork()
返回时挂起它,即; 存储它。
如果这对你来说效率不高,那么就像评论者评论的那样,你可以设置一个或两个pipe()
来将它传回父母。
int io[2];
pipe(io);
io[0]
在; io[1]
出局了。 你会使用write()
和read()
。
这是一个使用管道与儿子对应的小例子:
#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;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.