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.
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
tauschenBEARBEITEN: 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
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:
Wenn Sie die PIDs tatsächlich in einem Array speichern müssen, ist pgrep
, wie Sie es tun würden:
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)
?
Es stellt sich heraus, dass bash
scripting überhaupt nicht benötigt wird.
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 ps 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%