Comment et où linux-kernel lit le fichier proc/pid qui montre tous les processus dans le système. J'ai trouvé linux-source-2.6.31/fs/proc/Ici il y a des fichiers, mais c'est difficile à comprendre car c'est vraiment compliqué. Quelqu'un peut-il savoir, comment cela fonctionne?Comment linux-kernel lit-il le fichier proc/pid?
Répondre
Regardez dans votre répertoire/proc, il y a un fichier virtuel qui liste tous les processus en cours d'exécution dans le système, même le programme binaire ps ouvre réellement ce fichier dans le répertoire/proc pour afficher la liste des processus/pids ..
Linux ProcFs Guide Linux Proc Filesystem as a Programmer's Tool
/proc est un pseudo-système de fichiers, ce qui signifie que son contenu ne sont pas des fichiers "vrais". Au lieu de cela, le contenu est une représentation des structures de données internes du noyau. Par conséquent le noyau n'a pas besoin de lire eux - il peut déjà accéder aux données directement./Proc est utilisé par les programmes en mode utilisateur (c'est-à-dire non noyau) tels que ps
pour connaître (par exemple) les processus s'exécutant sur le système. Il y a un man page qui décrit une grande partie de ce qui est disponible.
Vous cherchez au bon endroit. Plus précisément, la fonction proc_pid_readdir()
de fs/proc/base.c
est utilisée pour remplir la liste des entrées PID lors de la lecture du répertoire racine /proc
. Vous pouvez voir la boucle de base autour de tous les processus et tâches de cette fonction:
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;
}
}