Tło: bawię się monitorowaniem ulimit pod kątem uruchamiania procesów dla konkretnego użytkownika. (Od czasu do czasu widziałem procesy, które zaczynały się z niepoprawnym limitem.) Zapytałem kilku samozwańczych guru Linuksa, a jeden zasugerował lsof -p <pid>
, podczas gdy drugi zasugerował ls /proc/<pid>/fd
, ale żaden nie był pozytywny, co do którego dokładniej odzwierciedla faktyczne liczenie w kierunku maksimum limit otwartych plików dla procesu.
Więc co to jest?
lsof -p <pid> | wc -l
Lub
ls /proc/<pid>/fd | wc -l
Proszę wyjaśnić różnicę. Dzięki!
lsof
strony podręcznika i chociaż podejrzewałem, że odpowiedzią są pliki mapowane w pamięci, chciałem potwierdzenia osoby bardziej doświadczonej.Odpowiedzi:
lsof
da ci również pliki ISO mapowane na pamięć - co technicznie nie jest tym samym, co uchwyt pliku, nad którym aplikacja ma kontrolę./proc/<pid>/fd
jest punktem pomiarowym dla otwartych deskryptorów plików - jednak: wspomniany na stronie proc-man - jeśli główny wątek programu wielowątkowego zostanie zakończony, ten katalog będzie niedostępny.lsof -p <pid> | grep -v mem | egrep -v '^COMMAND PID' | wc -l
pokaże ci te same przedmioty, cols /proc/<pid>/fd | wc -l
.Mapy pamięci są dostępne w
/proc/<pid>/maps
.źródło
lsof
Daje prawie taki sam wynik, ale również zawieracwd
,rtd
itxt
deskryptory plików.COMMAND
iPID
może się różnić. Zamień spacje[[:space:]]*
na bardziej ogólne.lsof -a -p <pid> -d ^mem -d ^cwd -d ^rtd -d ^txt -d ^DEL | wc -l
tutaj , podczas gdylsof
w powłoce Androida (adb shell
) nie obsługuje-a
i-d
. Więc w końcu używam wersji Kvisle.