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.