[英]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.