Finden Sie die PID (s) laufender Prozesse und speichern Sie sie als Array

8

Ich versuche ein Bash-Skript zu schreiben, um die PID eines laufenden Prozesses zu finden, und gebe dann einen Kill-Befehl aus. Ich habe es teilweise funktioniert, aber das Problem, dem ich gegenüberstehe, ist, dass mehr als ein Prozess läuft. Ich möchte einen Kill-Befehl für jede gefundene PID ausgeben.

Ich gehe davon aus, dass ich jede PID in ein Array einfügen muss, aber ich weiß nicht, wie ich das machen soll.

Was ich bisher habe:

%Vor%

Damit werden alle PIDs in einer einzigen Zeile zurückgegeben, aber ich kann nicht herausfinden, wie ich dies in ein Array aufteilen soll.

    
user3255401 31.01.2014, 00:24
quelle

4 Antworten

19

Hier ist ein kleiner Liner, der helfen könnte

%Vor%

Ersetzen Sie einfach your_search_term durch den Prozessnamen, den Sie löschen möchten.

Sie können auch ein Skript erstellen und Ihr_Suchterm für $ 1

tauschen

BEARBEITEN: Ich denke, ich sollte erklären, wie das funktioniert.

Die Rückseite tickt '' die Ausgabe von dem Ausdruck darin. In diesem Fall wird eine Liste von PIDs für einen Prozessnamen zurückgegeben.

Mit einer for-Schleife können wir jede pid durchlaufen und den Prozess beenden.

EDIT2: hat kill -9 mit kill ersetzt

    
SparkyRobinson 31.01.2014, 00:30
quelle
2

Sie müssen kein Array verwenden, wenn Sie sofort über die Ergebnisse iterieren und eine Aktion ausführen möchten:

%Vor%

Beachten Sie, dass wir die% pid grep von der Liste der zu löschenden Prozesse ausschließen müssen. Oder wir könnten einfach pgrep(1) verwenden:

%Vor%

Wenn Sie die PIDs tatsächlich in einem Array speichern müssen, ist pgrep , wie Sie es tun würden:

%Vor%

Zurück zum Tötungsvorgang. Wir können es noch besser machen. Wenn wir nur pgrep verwenden, um eine Liste von Prozessen zu erhalten, die sie töten können, warum nicht gleich das Schwesterprogramm von pgrep aufrufen: pkill(1) ?

%Vor%

Es stellt sich heraus, dass bash scripting überhaupt nicht benötigt wird.

    
Michael Kropat 31.01.2014 01:23
quelle
2

Ich weiß nicht, warum Sie jemals nach einem Prozess suchen würden, der getötet werden kann, sofern Sie den Befehlsnamen nicht kennen. Die meisten modernen Versionen von haben die Flaggen

%Vor%

und

%Vor%

So können Sie einfach

tun %Vor%

Gibt die PID aller Prozesse mit dem Namen "commandName" zurück und ist sauberer und schneller. Oder eine Schleife beenden

%Vor%

Aber wirklich, du solltest es immer tun können

%Vor%     
BroSlow 31.01.2014 01:43
quelle
0

Dein Skript scheint in Ordnung zu sein, wenn du jede PID-Liste auf einem neuen Like haben möchtest, dann ersetze:

%Vor%

mit

%Vor%     
Ell 31.01.2014 00:39
quelle

Tags und Links