GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie finde ich den Prozess mit maximalen Dateideskriptoren?

Was ist falsch an diesem for Schleife? Ich versuche herauszufinden, welcher Prozess die maximale Anzahl von Dateideskriptoren hat. Der erste Befehl im for Schleife ps aux | awk '{print $2}' druckt nur die Prozess-IDs aus. Ich kenne den ersten Fehler lsof: illegal process ID: PID ist da, weil die erste Zeile der Ausgabe PID ist , aber sollte die Schleife nicht für den Rest der Zeilen funktionieren?

[[email protected] ~]# for i in `ps aux | awk '{print $2}'` ; do `lsof -p $i | wc -l` ; done
lsof: illegal process ID: PID
lsof 4.82
 latest revision: ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/
 latest FAQ: ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/FAQ
 latest man page: ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/lsof_man
 usage: [-?abhlnNoOPRtUvVX] [+|-c c] [+|-d s] [+D D] [+|-f[gG]] [+|-e s]
 [-F [f]] [-g [s]] [-i [i]] [+|-L [l]] [+m [m]] [+|-M] [-o [o]] [-p s]
[+|-r [t]] [-s [p:s]] [-S [t]] [-T [t]] [-u s] [+|-w] [-x [fl]] [--] [names]
Use the ``-h'' option to get more help information.
-bash: 0: command not found
-bash: 22: command not found
-bash: 4: command not found
-bash: 4: command not found
-bash: 4: command not found
-bash: 4: command not found
^C
[[email protected] ~]#

Warum führt es die Ausgabe von wc -l aus anstatt zur Schleife zurückzukehren?

Oder gibt es eine andere Möglichkeit, den Prozess mit maximalen Dateideskriptoren zu finden?

Akzeptierte Antwort:

Das Problem sind die Backticks in Ihrem do ... done Abschnitt.

Beim Schreiben von Shell-Skripten müssen Sie keine Blöcke kapseln (if; then ... fi , while; do ... done , usw.) in Backticks. Dies führt dazu, dass die Shell den Inhalt der Backticks auswertet und diesen Inhalt dann ausführt. Die Backticks geben also eine Zahl zurück (die Anzahl der geöffneten Dateien) und versuchen dann, diese Zahl auszuführen, was zu einem command not found führt .

Sie wollen also:

for i in `ps aux | awk '{print $2}'` ; do lsof -p $i | wc -l ; done

Linux
  1. Finden Sie Dateien und Verzeichnisse unter Linux mit dem Befehl find

  2. Wie finde ich doppelte Dateien in Linux? Hilfe ist hier mit dem fdupes-Befehl!

  3. Wie finde ich die maximale Stapelgröße?

  4. So finden Sie eine Datei mit name=php.ini unter Linux mit dem Befehl grep

  5. So finden Sie die .pid-Datei für einen bestimmten Prozess

So verwenden Sie den md5sum-Befehl unter Linux

So verwenden Sie den Touch-Befehl unter Linux

So verwenden Sie den Linux-Kopfbefehl

So verwenden Sie den Linux-diff-Befehl

So finden Sie Dateien mit dem fd-Befehl in Linux

So finden Sie Dateien mit Dutzenden von Kriterien mit dem Bash-Suchbefehl