Ich möchte ein Skript, das die Instanz (en) beendet, ssh
die mit dem Argument -D ausgeführt werden (Einrichten eines lokalen Proxys).
Manuell ps -A | grep -i ssh
suche 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
)
pgrep
undpkill
sind Befehle zum zuverlässigen Auffinden oder Beenden von Prozessen nach Namen unter Solaris und Linux.Antworten:
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 einfachpgrep
aufpkill
und halten die gleichen Optionen und MusterSie sollten auch nicht
kill -9
aka 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 erstkill -9
nach dem ersten Versuch-1
-2
und-3
.quelle
for
Schleife definieren, die eskill -i
für jeden tuti
;)pgrep
ist unter OSX nicht nativ, Sie müssen es von einem Drittanbieter beziehen. Der vorherige Thread zum Thema enthält Vorschläge und Alternativen.-a
Flag hinzuzufügen, zupgrep
dem 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.Ebenfalls,
quelle
pkill
Sie können das proc-Dateisystem nutzen, um die Informationen zu sammeln. Beispielsweise:
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.quelle
/proc
. Und dafür gibt es bereits ein robustes Tool namenspgrep
(zumindest unter Solaris und Linux nativ verfügbar).