GNU/Linux >> Tutoriels Linux >  >> Linux

Linux – /proc/pid/fd/x Numéro de lien ?

Sous Linux, dans /proc/PID/fd/X , les liens pour les descripteurs de fichiers qui sont des canaux ou des sockets ont un numéro, comme :

l-wx------ 1 user user 64 Mar 24 00:05 1 -> pipe:[6839]
l-wx------ 1 user user 64 Mar 24 00:05 2 -> pipe:[6839]
lrwx------ 1 user user 64 Mar 24 00:05 3 -> socket:[3142925]
lrwx------ 1 user user 64 Mar 24 00:05 4 -> socket:[3142926]
lr-x------ 1 user user 64 Mar 24 00:05 5 -> pipe:[3142927]
l-wx------ 1 user user 64 Mar 24 00:05 6 -> pipe:[3142927]
lrwx------ 1 user user 64 Mar 24 00:05 7 -> socket:[3142930]
lrwx------ 1 user user 64 Mar 24 00:05 8 -> socket:[3142932]
lr-x------ 1 user user 64 Mar 24 00:05 9 -> pipe:[9837788]

Comme sur la première ligne :6839. Que représente ce nombre ?

Réponse acceptée :

C'est le numéro d'inode du tube ou de la prise en question.

Un tube est un canal unidirectionnel, avec une extrémité d'écriture et une extrémité de lecture. Dans votre exemple, il semble que FD 5 et FD 6 se parlent, puisque les numéros d'inode sont les mêmes. (Peut-être pas, cependant. Voir ci-dessous.)

Plus courant que de voir un programme se parler via un tube, c'est une paire de programmes séparés qui se parlent, généralement parce que vous configurez un tube entre eux avec un shell :

shell-1$ ls -lR / | less

Puis dans une autre fenêtre de terminal :

shell-2$ ...find the ls and less PIDs with ps; say 4242 and 4243 for this example...
shell-2$ ls -l /proc/4242/fd | grep pipe
l-wx------ 1 user user 64 Mar 24 12:18 1 -> pipe:[222536390]
shell-2$ ls -l /proc/4243/fd | grep pipe
l-wx------ 1 user user 64 Mar 24 12:18 0 -> pipe:[222536390]

Cela indique que la sortie standard du PID 4242 (FD 1, par convention) est connectée à un tuyau avec le numéro d'inode 222536390, et que l'entrée standard du PID 4243 (FD 0) est connectée au même tuyau.

Tout cela est une longue façon de dire que ls La sortie de est envoyée à less l'entrée.

Pour en revenir à votre exemple, FD 1 et FD 2 ne sont presque certainement pas se parler. C'est très probablement le résultat de lier stdout (FD 1) et stderr (FD 2) ensemble, de sorte qu'ils vont tous les deux vers la même destination. Vous pouvez le faire avec un shell Bourne comme celui-ci :

$ some-program 2>&1 | some-other-program

Donc, si vous fouiniez dans /proc/$PID_OF_SOME_OTHER_PROGRAM/fd , vous trouverez un troisième FD attaché à un tube avec le même numéro d'inode que celui attaché aux FD 1 et 2 pour le some-program exemple. C'est peut-être aussi ce qui se passe avec les FD 5 et 6 dans votre exemple, mais je n'ai pas de théorie prête sur la façon dont ces deux FD se sont liés. Vous devez savoir ce que le programme fait en interne pour comprendre cela.

Connexe :Linux – Afficher uniquement les points de montage « intéressants » / filtrer les types non intéressants ?
Linux
  1. Linux – Lier /proc/mnt à /proc/mounts ?

  2. Linux – Nombre de processeurs dans /proc/cpuinfo ?

  3. /proc/[pid]/pagemaps et /proc/[pid]/maps | linux

  4. Quand dois-je utiliser /dev/shm/ et quand dois-je utiliser /tmp/?

  5. Est-ce une erreur de lier /dev/random à /dev/urandom sous Linux ?

Un guide pour le système de fichiers ‘/proc’ sous Linux

Fichiers /proc/cpuinfo et /proc/meminfo sous Linux

Qu'est-ce que le fichier /etc/passwd sous Linux ?

Comprendre les fichiers /proc/mounts, /etc/mtab et /proc/partitions

Comment décoder les entrées /proc/pid/pagemap sous Linux ?

sysctl vs écrire directement dans /proc/*