Come posso ottenere maggiori informazioni su open pipe show in / proc in Linux?


53

In Linux se vai a scavare /proc/<pid>/fdspesso vedrai un output come:

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]

Come posso ottenere maggiori informazioni sui tubi aperti, ad esempio quale processo si trova all'altra estremità?


Quindi, trovarlo nel suo insieme /procè lento. Qualcuno può fornire una soluzione più efficace?
Pihentagy,

Risposte:


46

Simile ad altre risposte, ma:

lsof | grep 90222668

Ti mostrerà entrambe le estremità, perché entrambe le estremità condividono il "numero di pipe".


3
Ah certo. Funziona come previsto. Puoi anche dire il numero del descrittore di file e quale fine è il lettore e quale è lo scrittore guardando la quarta colonna di output!
Kamil Kisiel,

Penso che quel numero potrebbe essere il numero di inode del pipe per pipefs che non puoi montare. Sto cercando un modo per ottenere l'inode ai mapping dei nomi dei file, ma questo potrebbe essere il modo migliore. A proposito, adoro questa domanda :-)
Kyle Brandt

In qualche modo questo non funziona per me. Tutto ciò che emette è il tubo stesso.
Rui Marques,

l'esecuzione di lsof come utente standard potrebbe non fornire informazioni da tutti i processi. Di solito non si ha il permesso di vedere tutti i processi '/ proc / <pid> / fd come utenti non root.
Andre Holzner,

5
Inoltre, potresti voler utilizzare lsof -n -P | grep 90222668per evitare ricerche di nomi non necessarie, che dovrebbero accelerare.
Wodin,

4

L'unico modo per trovare quale processo si trova all'altra estremità è passare in rassegna tutti i processi in / proc e vedere quali stanno usando quella pipe (cioè, che hanno collegamenti simbolici in / proc / pid / fd allo stesso ID pipe)


Grazie per il consiglio. Un modo per automatizzare questo è: ls -l /proc/*/fd/ | grep $PIPE_ID; ls -l /proc/*/fd/$FD | grep $PIPE_ID il primo comando ls stamperà i descrittori di file di entrambe le estremità della pipe, mentre il secondo ti fornirà l'id di processo
Joao Costa,

2

La maggior parte delle informazioni che conosco su come aprire le pipe è

lsof|grep FIFO

Temo ancora solo un'estremità, temo.


È quasi lo stesso che posso divinare da / proc, suppongo che lsof lo ottenga dalla stessa posizione.
Kamil Kisiel,
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.