Unter bash
sollten Sie in der Lage sein zu tun:
kill $(ps aux | grep '[p]ython csp_build.py' | awk '{print $2}')
Einzelheiten zu seiner Funktionsweise sind wie folgt:
- El
ps
erhalten Sie die Liste aller Prozesse.
- El
grep
filtert diese auf der Grundlage Ihres Suchbegriffs, [p]
ist ein Trick, um zu verhindern, dass Sie die eigentliche grep
Prozess selbst.
- El
awk
gibt Ihnen nur das zweite Feld jeder Zeile an, das die PID ist.
- El
$(x)
konstruieren bedeutet ausführen x
und geben Sie dessen Ausgabe in die Befehlszeile ein. Die Ausgabe dieser ps
Pipeline innerhalb des obigen Konstrukts ist die Liste der Prozess-IDs, so dass Sie am Ende einen Befehl erhalten wie kill 1234 1122 7654
.
Hier ist eine Abschrift, die es in Aktion zeigt:
pax> sleep 3600 &
[1] 2225
pax> sleep 3600 &
[2] 2226
pax> sleep 3600 &
[3] 2227
pax> sleep 3600 &
[4] 2228
pax> sleep 3600 &
[5] 2229
pax> kill $(ps aux | grep '[s]leep' | awk '{print $2}')
[5]+ Terminated sleep 3600
[1] Terminated sleep 3600
[2] Terminated sleep 3600
[3]- Terminated sleep 3600
[4]+ Terminated sleep 3600
und Sie können sehen, wie sie alle Schwellen abschließt.
Erläuterung der grep '[p]ython csp_build.py'
ein bisschen ausführlicher:
Wenn Sie das tun sleep 3600 &
gefolgt von ps -ef | grep sleep
erhalten Sie in der Regel zwei Prozesse mit sleep
darin, die sleep 3600
und die grep sleep
(denn beide haben sleep
in ihnen, das ist keine Raketenwissenschaft).
Allerdings, ps -ef | grep '[s]leep'
erzeugt keinen Prozess mit sleep
in ihr, sondern erstellt stattdessen grep '[s]leep'
und hier ist der Knackpunkt: die grep
findet es nicht, weil es nach dem regulären Ausdruck "any character from the character class" sucht [s]
(das ist s
), gefolgt von leep
.
Mit anderen Worten, es wird gesucht nach sleep
aber der grep-Prozess ist grep '[s]leep'
die nicht über sleep
darin.
Als mir dies (von jemandem hier auf SO) gezeigt wurde, habe ich sofort damit angefangen, weil
- es ist ein Prozess weniger als das Hinzufügen von
| grep -v grep
und
- es ist elegant y heimtückisch, eine seltene Kombination :-)
3 Stimmen
Glauben Sie mir! :'D Die erste Antwort, die Sie gewählt haben, ist viel komplexer als die Lösung, die Sie in Ihrer Antwort angegeben haben. Ich würde lieber deinen Weg wählen.
0 Stimmen
Die beste Möglichkeit zu prüfen, ob ein Prozess existiert: stackoverflow.com/questions/3043978/