Nie rozumiem wyjścia polecenia lsof.
Kiedy piszę
lsof -p PID
Dostaję 4 linie i kiedy piszę
lsof | grep PID
Dostaję setki linii.
Czy nie powinien zwrócić tego samego wyniku?
Dziękuję za twoje odpowiedzi. Oto wyniki. Wygląda na to, że jest to podproces lub co oznaczają te zadania?
lsof -p 29076
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
java 29076 pr cwd unknown /proc/29076/cwd (readlink: Permission denied)
java 29076 pr rtd unknown /proc/29076/root (readlink: Permission denied)
java 29076 pr txt unknown /proc/29076/exe (readlink: Permission denied)
java 29076 pr NOFD /proc/29076/fd (opendir: Permission denied)
lsof |grep 29076|head -20
java 29076 pr cwd unknown /proc/29076/cwd (readlink: Permission denied)
java 29076 pr rtd unknown /proc/29076/root (readlink: Permission denied)
java 29076 pr txt unknown /proc/29076/exe (readlink: Permission denied)
java 29076 pr NOFD /proc/29076/fd (opendir: Permission denied)
java 29076 300 pr cwd unknown /proc/29076/task/300/cwd (readlink: Permission denied)
java 29076 300 pr rtd unknown /proc/29076/task/300/root (readlink: Permission denied)
java 29076 300 pr txt unknown /proc/29076/task/300/exe (readlink: Permission denied)
java 29076 300 pr NOFD /proc/29076/task/300/fd (opendir: Permission denied)
java 29076 329 pr cwd unknown /proc/29076/task/329/cwd (readlink: Permission denied)
java 29076 329 pr rtd unknown /proc/29076/task/329/root (readlink: Permission denied)
java 29076 329 pr txt unknown /proc/29076/task/329/exe (readlink: Permission denied)
java 29076 329 pr NOFD /proc/29076/task/329/fd (opendir: Permission denied)
java 29076 330 pr cwd unknown /proc/29076/task/330/cwd (readlink: Permission denied)
java 29076 330 pr rtd unknown /proc/29076/task/330/root (readlink: Permission denied)
java 29076 330 pr txt unknown /proc/29076/task/330/exe (readlink: Permission denied)
java 29076 330 pr NOFD /proc/29076/task/330/fd (opendir: Permission denied)
java 29076 331 pr cwd unknown /proc/29076/task/331/cwd (readlink: Permission denied)
java 29076 331 pr rtd unknown /proc/29076/task/331/root (readlink: Permission denied)
java 29076 331 pr txt unknown /proc/29076/task/331/exe (readlink: Permission denied)
java 29076 331 pr NOFD /proc/29076/task/331/fd (opendir: Permission denied)
lsof - lista otwartych plików, spróbuj przeczytać stronę podręcznika dla lsof
#man lsof
lsof -p PID
wyświetla otwarte pliki powiązane z identyfikatorem procesu PID.W przypadku braku jakichkolwiek opcji, lsof wyświetla listę wszystkich otwartych plików należących do wszystkich aktywnych procesów. kiedy to zrobisz
lsof | grep PID
, wyświetla listę wszystkich otwartych plików należących do wszystkich aktywnych procesów i podaje numer PID, który może pasować do samego PID, a także w dowolnym miejscu, gdzie PID pojawia się jako część innych PID i może być również procesem potomnym PID, oraz wkrótce.Dlatego jeśli chcesz użyć
lsof | grep PID
, powinieneś dokładnie dopasować PID, tak jak pełne dopasowanie słówlsof | grep -w PID
, ale nadal spowoduje to powstanie większej liczby wierszy, jeśli PID ma inne procesy potomne.źródło
Próbowałem tego w moim systemie i oba polecenia generują te same listy, sugeruję, abyś wypróbował oba polecenia kolejno kilka razy, aby upewnić się, że stan procesu jest stabilny. Według strony man i twoich wyników jest to jedyne wyjaśnienie, jakie mogę mieć.
źródło
Niektóre wersje lsof zawierają identyfikator wątku. Można to ustalić na podstawie nagłówka kolumny TID widocznego na wyjściu. Takie wyjście spowoduje duplikację wpisów, ponieważ lsof potencjalnie pokaże zduplikowane wpisy po jednym dla każdego wątku.
https://support.datastax.com/hc/en-us/articles/209826153-lsof-shows-Cassandra-is-holding-a-large-amount-of-files-open
źródło