Si dos procesos están conectados por una tubería,
> cmd1 | cmd2
¿Hay alguna forma de cmd1averiguar el nombre (o PID) del proceso en el otro lado de la tubería ( cmd2)?
Además, viceversa, ¿hay alguna forma de cmd2obtener el nombre / PID de cmd1?
Sé que hay isatty(3)que verificar si la salida va (o la entrada proviene) a un terminal, así que me pregunté si hay una manera de averiguar un poco más sobre el otro lado.

cmd2bifurca.cmd1 | (cmd2 & cmd3)Respuestas:
Puedes ver la tubería adentro
/proc/$PID/fd. El descriptor es un enlace simbólico a algo asípipe:[188528098]. Con esa información puede buscar el otro proceso:O, si desea estar seguro (para el procesamiento automático) de que el número es el socket y no parte del nombre de un archivo:
Con
lsof4.88 y superior, también puede usar las banderas-Eo+E:En combinación con
-p <pid>,-d <descriptor>puede obtener la información del punto final para un descriptor específico de un pid dado .Por encima de decirnos que
fd0 deshes una tubería con fd 1 desleepen el otro extremo. Si cambia-Ea+E, también obtiene la información completa para ese fd desleep:(vea cómo
lsoftambién tiene la tubería en su stdin)fuente
lsofhacerlo.