Preguntas sobre el código fuente del kernel de Linux pid_task
Conclusión: pids[tipo].pid_list, el kernel lo trata como una ruta de cadena (excepto que es necesario reemplazar el tipo).
Funciona de la siguiente manera:
El descriptor de proceso task_struct contiene el campo pids, que es una matriz
struct?task_struct?{
..
struct?pid?pids[PIDTYPE_MAX];
struct?pids[PIDTYPE_MAX];
El campo pids es una ruta de cadena. MAX];
};
El tipo de pid se define de la siguiente manera: struct?pid
{
int?nr;
struct?hlist_node?pid_chain;
struct?list_head?pid_list; ?//?*?elem
};
pid_task macro #define?pid_task (elem,?type)?
list_entry(elem,?struct?task_struct,?pids[type].pid_list)
Resumiendo, obtuvimos lo siguiente información
p>elem inicialmente apunta a la variable pid_list de tipo struct list_head,
pid_list(pid[type].pid_list)
pid_task macro #define?
Elem inicialmente apunta a una variable pid_list de tipo struct list_head,
pid_list (al que se accede a través de .pid_list) que contiene pid (al que se accede a través de pids[tipo]) es una entrada en el descriptor del proceso member pids,
p>Por lo tanto, la ruta de la variable señalada por elem es?pids[type].pid_list