Comment puis-je obtenir plus d'informations sur les pipes ouvertes affichées dans / proc sous Linux?

53

Sous Linux, si vous creusez /proc/<pid>/fdsouvent, vous verrez une sortie comme:

lrwx------ 1 root root 64 Jul 30 15:14 0 -> /dev/null
lrwx------ 1 root root 64 Jul 30 15:14 1 -> /dev/null
l-wx------ 1 root root 64 Jul 30 15:14 10 -> pipe:[90222668]
lr-x------ 1 root root 64 Jul 30 15:14 11 -> pipe:[90222669]
l-wx------ 1 root root 64 Jul 30 15:14 13 -> pipe:[90225058]
lr-x------ 1 root root 64 Jul 30 15:14 14 -> pipe:[90225059]

Comment puis-je obtenir plus d'informations sur les canaux ouverts, tels que le processus à l'autre extrémité?

Kamil Kisiel
la source
lsof, de trouver en entier /procest lent. Quelqu'un peut-il fournir une solution plus efficace?
pihentagy

Réponses:

46

Similaire à d'autres réponses, mais:

lsof | grep 90222668

Vous montrera les deux extrémités, car les deux extrémités partagent le «numéro de tuyau».

Kyle Brandt
la source
3
Ah bien sur. Fonctionne comme prévu. Vous pouvez même indiquer le numéro du descripteur de fichier et indiquer la fin du lecteur et le rédacteur en regardant la 4ème colonne de sortie!
Kamil Kisiel
Je pense que ce nombre pourrait être le numéro d’inode du tuyau pour les pipefs que vous ne pouvez pas monter. Je cherche un moyen d'obtenir un inode pour les mappages de noms de fichiers, mais c'est peut-être le meilleur moyen. Au fait, j'adore cette question :-)
Kyle Brandt le
D'une certaine manière, cela ne fonctionne pas pour moi. Tout ce qu'il produit, c'est le tuyau lui-même.
Rui Marques
exécuter lsof en tant qu'utilisateur standard peut ne pas vous donner d'informations de tous les processus. Généralement, vous n'êtes pas autorisé à voir le répertoire / proc / <pid> / fd de tous les processus en tant qu'utilisateur non root.
Andre Holzner
5
En outre, vous voudrez peut-être utiliser lsof -n -P | grep 90222668pour éviter les recherches de nom inutiles, ce qui devrait accélérer le processus.
Wodin
4

La seule façon de trouver le processus à l'autre extrémité consiste à afficher en boucle tous les processus de / proc et à voir ceux qui utilisent ce canal (c'est-à-dire qui ont des liens symboliques dans / proc / pid / fd vers le même ID de canal).

Bdonlan
la source
Merci pour le conseil. Une façon d'automatiser cela est la suivante: ls -l /proc/*/fd/ | grep $PIPE_ID; ls -l /proc/*/fd/$FD | grep $PIPE_ID La première commande ls imprimera les descripteurs de fichier des deux extrémités du tuyau, tandis que la seconde vous donnera le processus id
Joao Costa
2

La plupart des informations que je sais comment accéder aux tuyaux ouverts sont

lsof|grep FIFO

Je n'en ai encore qu'une idée, j'en ai peur.

le chaos
la source
C'est à peu près la même chose que je peux deviner à partir de / proc, je suppose que lsof l'obtient au même endroit.
Kamil Kisiel