2016-12-06 4 views
1

Je travaille actuellement sur un projet et dans ce cadre j'ai besoin de mettre en œuvre des fonctions d'appel système/bibliothèque dans MINIX. Dans le cadre de cela, j'ai besoin d'être capable d'imprimer une liste de processus enfants d'un processus donné, en utilisant son pid. Je pense avoir trouvé une partie de ce dont j'ai besoin, mais je suis obligé de le faire fonctionner avec un pid donné.Imprimer les processus enfants avec un pid (MINIX)

struct task_struct *task; 
struct list_head *list; 

list_for_each(list, &current->children) { 
    task = list_entry(list, struct task_struct, children); 
} 

Est-ce que cela semble quelque chose à ce que je avais besoin? Je sais que pour faire passer une pid pour moi d'utiliser je dois utiliser:

struct task_struct find_task_by_pid(pid_t pid); 

Mais la combinaison avec ce qui précède n'est pas quelque chose que je l'ai fait avant.

Répondre

1

Je l'ai compris, ne me semble pas trop efficace mais ça marche.

#include <stdio.h> 
#include "pm.h" 
#include "mproc.h" 

int do_printchildpids(){ 
int i = m_in.m1_i1; //pid received 
int c = 0; //Counter 


printf("Searching for children of process: %d \n", i); 

while (c < NR_PROCS) 
    { 
    int n = mproc[c].mp_pid; //First process in the list of availableprocess 
    int pinx = mproc[c].mp_parent; //Index of parent of the current process 
    int ppid = mproc[pinx].mp_pid; //pid of parent process 


    if(i == ppid) //If parents pid matches the given value 
    { 
    printf("%d \n", n); //Print the childs id 
    c++; 
    } 
    else 
    { 
    c++; 
    } 
    } 
return -1; 
}