it-swarm.com.de

Ermittlung der Prozessanzahl in Linux über die Befehlszeile

Ich suchte nach dem besten Weg, um die Anzahl der laufenden Prozesse mit demselben Namen über die Befehlszeile in Linux zu finden. Zum Beispiel, wenn ich die Anzahl der laufenden Bash-Prozesse ermitteln wollte und "5" bekomme. Derzeit habe ich ein Skript, das ein 'pidof' und dann eine Zählung für die tokenisierte Zeichenfolge ausführt. Das funktioniert gut, aber ich habe mich gefragt, ob es einen besseren Weg gibt, der vollständig über die Befehlszeile ausgeführt werden kann. Vielen Dank im Voraus für Ihre Hilfe. 

21
Traker

Auf Systemen, auf denen pgrep verfügbar ist, gibt die Option -c eine Anzahl der Prozesse zurück, die dem angegebenen Namen entsprechen

pgrep -c command_name

Beachten Sie, dass dies eine grep- Übereinstimmung ist, keine exakte Übereinstimmung, so z. pgrep sh passt auch zu bash-Prozessen. Wenn Sie eine genaue Übereinstimmung wünschen, verwenden Sie auch die Option -x.

Wenn pgrep nicht verfügbar ist, können Sie ps und wc verwenden.

ps -C command_name --no-headers | wc -l

Die -C-Option für ps verwendet command_name als Argument. Das Programm gibt eine Tabelle mit Informationen zu Prozessen aus, deren Name der ausführbaren Datei mit dem angegebenen Befehlsnamen übereinstimmt. Dies ist eine exakte Übereinstimmung, nicht grep-. Die Option --no-headers unterdrückt die Kopfzeilen der Tabelle, die normalerweise als erste Zeile gedruckt werden. Mit --no-headers erhalten Sie eine übereinstimmende Zeile pro Prozess. Dann zählt wc -l die Anzahl der Zeilen in ihrer Eingabe und gibt sie aus.

51
David Z
result=`ps -Al | grep command-name | wc -l`
echo $result
10
Amardeep AC9MF
ps -Al | grep -c bash
7
Alex B

Du kannst es versuchen :

ps -ef | grep -cw [p] rocess_name

OR

ps aux | grep -cw [p] rocess_name

z.B:  

ps -ef | grep -cw [i] nit

5

Einige der oben genannten Dinge funktionierten nicht für mich, aber sie halfen mir auf meinem Weg dahin.

ps aux | grep [j]ava -c

Für Neulinge zu Linux:

ps aux druckt alle derzeit ausgeführten Prozesse. grep sucht nach allen Prozessen, die mit dem Wort Java übereinstimmen. Die []-Klammern entfernen den gerade ausgeführten Prozess, sodass dieser Prozess nicht als laufender Prozess verwendet wird. Schließlich steht die -c-Option für count.

3
Niall O Shea

Alle Prozessnamen auflisten, sortieren und zählen

ps --no-headers -A -o comm | sort | uniq -c

Sie können auch einen Prozess auflisten, der einem tty zugeordnet ist

ps --no-headers a -o comm | sort | uniq -c

Sie können filtern mit:

ps --no-headers -A -o comm | awk '{ list[$1] ++ } END { for (i in list) { if (list[i] > 10) printf ("%20s: %s\n", i, list[i]) } }'
2
fraff

Das folgende bash-Skript kann als Cron-Job ausgeführt werden, und Sie erhalten möglicherweise E-Mails, wenn sich ein Prozess zu viel gibt.

for i in `ps -A -o comm= --sort=+comm | uniq`; 
do 
    if (( `ps -C $i --no-headers | wc -l` > 10 )); then 
        echo `hostname` $i `ps -C $i --no-headers | wc -l` ;
    fi
done

Ersetzen Sie 10 durch Ihre Bedenken. 

TODO: "10" könnte auch als Befehlszeilenparameter übergeben werden. Außerdem können nur wenige Systemprozesse in die Ausnahmeliste aufgenommen werden.

1
Sury Soni

ps aux | wc -l

Dieser Befehl zeigt die Anzahl der Prozesse an, die von allen Benutzern auf dem System ausgeführt werden.

Für einen bestimmten Benutzer können Sie den folgenden Befehl verwenden:

ps -u <username> | wc -l

ersetzen Sie mit dem tatsächlichen Benutzernamen vor dem Ausführen :)

0
spoorthi vaidya

Sie können ps (wird eine Momentaufnahme der Prozesse anzeigen) mit wc verwenden (zählt die Anzahl der Wörter, die wc -l-Option wird Zeilen zählen, d. H. Zeilenumbrüche) . Was sehr einfach und leicht zu merken ist.

ps -e | grep processName | wc -l

Dieser einfache Befehl gibt die Anzahl der auf dem aktuellen Server ausgeführten Prozesse aus. Wenn Sie die Anzahl der auf dem aktuellen Server ausgeführten Prozesse für den aktuellen Benutzer ermitteln möchten, verwenden Sie die -U-Option von ps.

ps -U root | grep processName | wc -l 

root mit Benutzername ändern.

Wie in vielen anderen Antworten erwähnt, können Sie auch ps -e | grep -c process_name verwenden, was auf elegantere Weise geschieht.

0
BreakBadSP