Trova quale processo si trova all'altra estremità di una pipe


34

Sto cercando di tracciare uno strano comportamento di alcuni processi e mi sono imbattuto in un punto che non sono sicuro di come rintracciare. Il processo bloccato, che ho allegato all'utilizzo ha strace -pmostrato questo:

Process 7926 attached - interrupt to quit
read(3, 

Va bene, quindi è in attesa di input su fd 3, quindi sono andato a controllare di cosa si tratta:

$ ls -l /proc/7926/fd/3
lr-x------ 1 user grp 64 Mar 15 10:41 /proc/7926/fd/3 -> pipe:[20043922]

Ok, quindi è una pipa ... ora la domanda: chi è lo scrittore di questa pipa? Ricordo che su Linux esiste una funzione speciale per i socket di dominio unix in cui è possibile richiedere un percorso file che inizia con un byte NUL per accedere allo "spazio dei nomi dei socket astratti" (menzionato qui: http://tkhanson.net/cgit.cgi /misc.git/plain/unixdomain/Unix_domain_sockets.html ). Non sono sicuro che ci sia qualcosa di simile per le pipe di cui potrei approfittare, ma non ho trovato nulla.

Speravo che uno strumento simile fusero lsofpotesse aiutare, ma non sono arrivato da nessuna parte.

Qualche idea?

Risposte:


32

I contenuti del collegamento simbolico "pipe: [20043922]" sono un ID univoco; l'altra estremità del tubo avrà un ID corrispondente.

(find /proc -type l | xargs ls -l | fgrep 'pipe:[20043922]') 2>/dev/null

dovrebbe mostrarti entrambe le estremità del tubo.


1
Grazie, grazie! Durante le indagini mi sono imbattuto anche in questo thread qui serverfault.com/questions/48330/…, quindi ho pensato di abbandonare il link qui anche solo per altri.
Errore fatale

2

Puoi ottenere l'elenco dei processi usando la pipe usando il lsofcomando:

lsof | grep 'FIFO.*20043922'

L'output mostrerà i lettori (nella colonna FD con voci come 1r) e gli scrittori (stesse colonne con voci come 2w).

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.