Jak mogę uzyskać więcej informacji na temat wyświetlania otwartych potoków w / proc w systemie Linux?


53

W Linuksie, jeśli /proc/<pid>/fdczęsto się zagłębiasz, zobaczysz dane wyjściowe takie jak:

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]

Jak uzyskać więcej informacji o otwartych potokach, takich jak proces na drugim końcu?


Znalezienie w całości /procjest powolne. Czy ktoś może zapewnić bardziej skuteczne rozwiązanie?
pihentagy

Odpowiedzi:


46

Podobne do innych odpowiedzi, ale:

lsof | grep 90222668

Pokaże oba końce, ponieważ oba końce mają wspólny „numer potoku”.


3
Ach, oczywiście. Działa zgodnie z oczekiwaniami. Możesz nawet powiedzieć numer deskryptora pliku i który koniec jest czytnikiem, a który piszącym, patrząc na czwartą kolumnę wyniku!
Kamil Kisiel

Myślę, że ta liczba może być liczbą i-węzłów potoku dla potoków, których nie można zamontować. Szukam sposobu, aby uzyskać i-węzeł mapowań nazw plików, ale może to być najlepszy sposób. Nawiasem mówiąc, uwielbiam to pytanie :-)
Kyle Brandt

Jakoś to nie działa dla mnie. Wszystko, co wyprowadza, to sama rura.
Rui Marques,

uruchamianie lsof jako standardowy użytkownik może nie podawać informacji ze wszystkich procesów. Zwykle nie masz uprawnień do wyświetlania katalogu wszystkich procesów / proc / <pid> / fd jako użytkownik inny niż root.
Andre Holzner,

5
Możesz także użyć tego, lsof -n -P | grep 90222668aby uniknąć niepotrzebnych wyszukiwań nazw, co powinno przyspieszyć.
Wodin

4

Jedynym sposobem na znalezienie procesu na drugim końcu jest zapętlenie wszystkich procesów w / proc i sprawdzenie, które używają tego potoku (tj. Które mają dowiązania symboliczne w / proc / pid / fd do tego samego ID potoku)


Dzięki za wskazówkę. Jednym ze sposobów na zautomatyzowanie tego jest: ls -l /proc/*/fd/ | grep $PIPE_ID; ls -l /proc/*/fd/$FD | grep $PIPE_ID Pierwsze polecenie ls wypisze deskryptory plików na obu końcach potoku, a drugie poda identyfikator procesu
Joao Costa

2

Najwięcej informacji, jakie znam na otwartych rurach, to

lsof|grep FIFO

Obawiam się, że wciąż mówi tylko o jednym końcu.


To mniej więcej tyle samo, ile mogę z boskiego / proc, mogę założyć, że lsof pobiera go z tej samej lokalizacji.
Kamil Kisiel
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.