C 程序 - 如何在父级中获取孩子的子 pid [分叉后]


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

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

对于父 pid ( getppid() (,没有直接的方法可以获取子 pid ,但是...

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

  1. 子 PID 将返回给父项。
  2. 0 在父级代码中返回给子级。
  3. 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;
}

最新更新