2009-11-22 15 views
5

Cómo y dónde lee linux-kernel el archivo proc/pid que muestra todos los procesos en el sistema. Encontré linux-source-2.6.31/fs/proc/Aquí hay archivos, pero es difícil de entender porque es realmente complicado. ¿Alguien sabe cómo funciona?¿Cómo lee el archivo linux-kernel proc/pid?

Respuesta

8

/proc es un pseudo sistema de archivos, lo que significa que sus contenidos no son archivos "reales". En cambio, los contenidos son una representación de las estructuras de datos internas del kernel. Por lo tanto, el kernel no necesita leer ellos - ya puede acceder a los datos directamente.

/proc es utilizado por programas de modo de usuario (es decir, no kernel) como ps para averiguar (por ejemplo) sobre procesos que se ejecutan en el sistema. Hay un man page que describe gran parte de lo que está disponible.

3

Estás buscando en el lugar correcto.

Específicamente, la función proc_pid_readdir() en fs/proc/base.c se usa para completar la lista de entradas pid cuando se lee el directorio raíz /proc. Puede ver el ciclo básico alrededor de todos los procesos y tareas en esa función:

ns = filp->f_dentry->d_sb->s_fs_info; 
iter.task = NULL; 
iter.tgid = filp->f_pos - TGID_OFFSET; 
for (iter = next_tgid(ns, iter); 
    iter.task; 
    iter.tgid += 1, iter = next_tgid(ns, iter)) { 
    filp->f_pos = iter.tgid + TGID_OFFSET; 
    if (proc_pid_fill_cache(filp, dirent, filldir, iter) < 0) { 
     put_task_struct(iter.task); 
     goto out; 
    } 
} 
Cuestiones relacionadas