Bash-Skript zum Finden und Beenden eines Prozesses mit bestimmten Argumenten?


17

Ich möchte ein Skript, das die Instanz (en) beendet, sshdie mit dem Argument -D ausgeführt werden (Einrichten eines lokalen Proxys).

Manuell ps -A | grep -i sshsuche ich die Instanz (en) mit -D und kill -9 {id}jede einzelne.

Aber wie sieht das in Bash-Skript-Form aus?

(Ich arbeite unter Mac OS X, installiere aber alle erforderlichen Befehle über port)


Siehe pgrep und pkill Alternativen auf Mac OS X? . pgrepund pkillsind Befehle zum zuverlässigen Auffinden oder Beenden von Prozessen nach Namen unter Solaris und Linux.
Gilles 'SO- hör auf, böse zu sein'

Antworten:


26

Führen Sie aus, pgrep -f "ssh.*-D"und überprüfen Sie, ob dies die richtige Prozess-ID zurückgibt. Ist dies der Fall, ändern Sie einfach pgrepauf pkillund halten die gleichen Optionen und Muster

Sie sollten auch nicht kill -9aka SIGKILL verwenden, es sei denn, dies ist unbedingt erforderlich, da Programme SIGKILL nicht abfangen können, um vor dem Beenden nach sich selbst aufzuräumen. Ich benutze erst kill -9nach dem ersten Versuch -1 -2und -3.


du solltest kill als eine forSchleife definieren, die es kill -ifür jeden tut i;)
Seamus

1
pgrepist unter OSX nicht nativ, Sie müssen es von einem Drittanbieter beziehen. Der vorherige Thread zum Thema enthält Vorschläge und Alternativen.
Gilles 'SO- hör auf böse zu sein'

man alive, je mehr ich 'nix benutze, desto mehr liebe ich es :) danke dafür!
javamonkey79

pgrep und pkill sind in OS X 10.8 (Mountain Lion) und höher verfügbar. apple.blogoverflow.com/2012/07/…
Peter Hanley

Es kann nützlich sein, das -aFlag hinzuzufügen, zu pgrepdem nicht nur die Prozess-ID, sondern auch der Befehl (einschließlich der Argumente) gedruckt werden soll. Auf diese Weise kann sehr einfach überprüft werden, ob nur die gewünschten Prozesse übereinstimmen.
Luator


0

Sie können das proc-Dateisystem nutzen, um die Informationen zu sammeln. Beispielsweise:

for proc in $(grep -irl "ssh.*-D" /proc/*/cmdline | grep -v "self"); do if [ -f $proc ]; then cat $proc && echo ""; fi; done

Es ist nicht perfekt, Sie möchten einen exklusiveren regulären Ausdruck (insbesondere, wenn Sie Prozesse beenden), echo $proc | awk -F'/' '{ print $3 }'zeigen Ihnen jedoch die PID der Prozesse.


1
OSX hat nicht /proc. Und dafür gibt es bereits ein robustes Tool namens pgrep(zumindest unter Solaris und Linux nativ verfügbar).
Gilles 'SO- hör auf böse zu sein'
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.