2016-12-16 41 views
1

システムコールにプロセスIDが渡された場合、すべての子プロセスIDを返す必要があります。これはCで書かれていなければなりません。mprocを使って子プロセスの親プロセスを取得し、特定のインデックスからすべてのプロセスをリストアップしていますが、それをそこから飛躍させることはできません。親プロセスのid(minix)から子プロセスIDを取得するCプログラム

マイコード:

int do_getchildpids() { 

// get pid from parameter 
int ppid = m_in.m1_i1; 

// Get the child pid of this process 
pid_t cpid; 


if (cpid == fork()) { 
    printf("Child pid for ppid %d is %d\n", ppid, getpid()); 
} 




// ** Other attempt at this problem below ** 




// if mp_parent == ppid then print pid 

int idx = 0; 
int cpid = mproc[idx].mp_pid; 
while (mproc[idx].mp_pid) { 


    idx++; 
} 

printf("Searching for children of %d...\n", ppid); 

if (pid == 0) { 
    // for loop that gets the ppid, checks against given ppid 
    // prints out pid if true 

    if (cpid) { 
     // loop through proc table checking if ppid is equal to parameter passed 
     if (ppid == mproc[mproc[i].mp_parent].mp_pid) 
      printf("Child pid is %d.\n", getpid()); 
    } 
    printf("Child pid is: %d.\n", getpid()); 
} else { 
    printf("Error, child pid was not set or is -1\n"); 
} 
return 0; 
} 
+0

私たちが助けたいコードをコメントアウトしないでください。シンタックスハイライトは読みにくいです。 – Barmar

+0

@Barmar apologies - edited。 – Jimmy

答えて

0

これは非常にjankyソリューションですが、Linuxを実行しているし、あなたが使用するか、Linuxのpgrepコマンドを使用することができ、親プロセスの子を取得したい場合fork()and execv()または単純なsystem()コールによって送信されます。次に、出力をファイルにパイプして、そのファイルの内容を読み込みます。

system("pgrep -P [parent_pid] 1>[outputfile]") 
fp = fopen([outputfile], "r") 
while (fscanf(fp, "%d", &child_pid) != EOF){ 
    <add child_pid to a list you've made> 
} 
fclose(fp) 

確かにこれを行うには良い方法があります。 cプログラムからpsまたはpgrepに電話することが可能かどうか調べてください。

関連する問題