簡體   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