C程序 - 如何让孩子的孩子在父母的pid [后叉]

时间:2014-10-19 04:21:18

标签: c fork pid

Parent-> fork
------------1st Child(A)-> fork again
-------------------->1st Child's Child(Aa)

如果我是父母,如何在C程序中获取孩子的孩子(Aa)pid? 或者如何获得这个组中的所有pid?

2 个答案:

答案 0 :(得分:2)

对于父pid(getppid()), ...

,没有直接获取子pid的方法

fork()返回以下三个值之一:child pid,0和-1。

  1. 将子pid返回给父母。
  2. 0将在父代码中返回给孩子。
  3. fork()有错误时,会返回
  4. -1。
  5. ...所以你已经在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;
}