Si deux processus sont connectés par un tuyau,
> cmd1 | cmd2
existe-t-il un moyen cmd1
de connaître le nom (ou PID) du processus de l'autre côté du tuyau ( cmd2
)?
Aussi, vice versa, existe-t-il un moyen cmd2
d'obtenir le nom / PID de cmd1
?
Je sais qu'il isatty(3)
faut vérifier si la sortie va (ou si l'entrée vient) d'un terminal, alors je me suis demandé s'il y avait un moyen d'en savoir un peu plus sur l'autre côté.
cmd2
bifurqué.cmd1 | (cmd2 & cmd3)
Réponses:
Vous pouvez voir le tuyau
/proc/$PID/fd
. Le descripteur est un lien symbolique vers quelque chose commepipe:[188528098]
. Avec ces informations, vous pouvez rechercher l'autre processus:Ou, si vous voulez être sûr (pour le traitement automatique) que le numéro est le socket et ne fait pas partie d'un nom de fichier:
Avec
lsof
4.88 et supérieur, vous pouvez également utiliser les drapeaux-E
ou+E
:En combinaison avec
-p <pid>
,-d <descriptor>
vous pouvez obtenir les informations de point final pour un particulier descripteur d'une donnée pid .Ci-dessus nous disant que
fd
0 desh
est un tuyau avec fd 1 desleep
l'autre extrémité. Si vous passez-E
à+E
, vous obtenez également les informations complètes pour ce fd desleep
:(voir comment a
lsof
également le tuyau sur son stdin)la source
lsof
.