繁体   English   中英

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

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

  1. 子pid返回给父级。
  2. 0将返回父代码中的子代。
  3. 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM