Hintergrund: Ich spiele mit dem Überwachen des ulimit, um Prozesse für einen bestimmten Benutzer auszuführen. (Ich hatte gelegentlich Prozesse gesehen, die mit einem falschen Limit begannen.) Ich fragte ein paar selbsternannte Linux-Gurus, und einer schlug vor lsof -p <pid>
, während der andere vorschlug ls /proc/<pid>/fd
, aber keiner war positiv, was die tatsächliche Anzahl gegenüber dem Maximum genauer widerspiegelte Offenes Dateilimit für einen Prozess.
Also, was ist das?
lsof -p <pid> | wc -l
Oder
ls /proc/<pid>/fd | wc -l
Bitte erläutern Sie den Unterschied. Vielen Dank!
lsof
Manpages gelesen , und obwohl ich vermutete, dass es sich bei der Antwort um Speicherdateien handelte, wollte ich die Bestätigung einer erfahreneren Person.Antworten:
lsof
Außerdem erhalten Sie speicherabgebildete .so-Dateien - was technisch nicht mit einem Dateihandle identisch ist, über das die Anwendung die Kontrolle hat./proc/<pid>/fd
ist der Messpunkt für offene Dateideskriptoren - allerdings: Erwähnt in der proc-man-Seite - wenn der Hauptthread eines Multithread-Programms beendet wurde, ist dieses Verzeichnis nicht verfügbar.lsof -p <pid> | grep -v mem | egrep -v '^COMMAND PID' | wc -l
zeigt Ihnen die gleichen Gegenstände wiels /proc/<pid>/fd | wc -l
.Die Speicherkarten sind in verfügbar
/proc/<pid>/maps
.quelle
lsof
gibt Ihnen fast die gleiche Leistung, aber es beinhaltet auchcwd
,rtd
undtxt
Datei - Deskriptoren.COMMAND
undPID
variieren kann. Ersetzen Sie die Leerzeichen durch[[:space:]]*
, um sie allgemeiner zu gestalten.lsof -a -p <pid> -d ^mem -d ^cwd -d ^rtd -d ^txt -d ^DEL | wc -l
hier , während dielsof
in Android - Shell (adb shell
) nicht unterstützt-a
und-d
. Also benutze ich endlich Kvisles Version.