Parent-> fork
------------1st Child(A)-> fork again
-------------------->1st Child's Child(Aa)
如果我父,如何讓C程序的孩子的孩子(AA)的pid? 或者如何獲得這個組中的所有pid?C程序 - 如何讓孩子的孩子PID在父[後叉]
Parent-> fork
------------1st Child(A)-> fork again
-------------------->1st Child's Child(Aa)
如果我父,如何讓C程序的孩子的孩子(AA)的pid? 或者如何獲得這個組中的所有pid?C程序 - 如何讓孩子的孩子PID在父[後叉]
這裏沒有一個直接的辦法讓孩子的PID父PID(getppid()
),但 ...
fork()
返回三個值中的一個:孩子PID,0和-1。
fork()
有錯誤時返回-1。...所以你已經有孩子(rens)pid(s)fork()
之前和之後。例如,如果你想要execl
之後的孩子pid,最簡單的方法就是當它由fork()
返回時,即掛在它上面,即;存儲它。
如果這對於您來說效率不夠,您可以設置一個pipe()
或兩個將其傳回父級。
int io[2];
pipe(io);
io[0]
is in; io[1]
不存在。您可以使用write()
和read()
。
在linux中,當我輸入「ps aux」時,它會顯示所有的pid。這個概念可以在C中使用以獲得想要的pid嗎?還有一個問題:是否可以在組pid內獲得所有pid?如果不是,那麼group pid有什麼用? (因爲在C中有一些setpgid) – 2014-10-19 05:00:54
你總是可以從你的C代碼中調用它作爲'system(「ps aux」);'但是你仍然需要鑽研我的想法。我不知道一種方法來獲得一個組中的所有pid。 ps上的選項可以做到這一點,但看起來像很多工作,至少比存儲它們更多。 – ChiefTwoPencils 2014-10-19 05:31:40
任何這樣的方法都有嚴重的錯誤識別過程和競爭條件。 – 2014-10-19 05:38:41
這裏是使用管道與兒子對應一個小例子:
#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;
}
你根本不可能,除非你有一些IPC方法來傳遞它了。 – 2014-10-19 04:26:28
孩子可以做零個,一個或多個叉子,沒有孩子的孩子。 – 2014-10-19 04:54:03
那麼,是否有可能獲得組pid內的所有pid?如果不是,那麼group pid有什麼用? (因爲在C中有一些setpgid) – 2014-10-19 04:55:48