7 Stimmen

Prozess in Shell-Skript beenden

Ich habe ein sehr einfaches Problem: Wenn ich ein Shell-Skript ausführe, starte ich ein Programm, das in einer Endlosschleife läuft. Nach einer Weile möchte ich dann dieses Programm stoppen, bevor ich es mit anderen Parametern erneut starten. Die Frage ist nun, wie finde ich die pid des Programms heraus des Programms heraus, wenn ich es ausführe? Im Grunde genommen möchte ich so etwas machen:

echo "Executing app1 with param1"  
./app1 param1 &  
echo "Executing app1"  
..do some other stuff  
#kill somehow app1
echo "Execution of app1 finished!"

Gracias.

15voto

Ryan Bright Punkte 3417

In den meisten Shells (einschließlich Bourne und C) wird die PID des letzten Unterprozesses, den Sie im Hintergrund gestartet haben, in der speziellen Variable $! gespeichert.

#!/bin/bash
./app1 &
PID=$!
# ...
kill $PID

Es gibt einige Informationen hier unter dem Abschnitt Spezielle Variablen.

5voto

sth Punkte 210180

In bash $! wird auf die PID des zuletzt im Hintergrund gestarteten Prozesses erweitert. Das können Sie also tun:

./app1 param1 &
APP1PID=$!
# ...
kill $APP1PID

3voto

cd1 Punkte 14827

Wenn Sie die PID eines Prozesses herausfinden wollen, können Sie ps :

[user@desktop ~]$ ps h -o pid -C app1

der Parameter -o pid sagt, dass Sie nur die PID des Prozesses wollen, -C app1 gibt den Namen des Prozesses an, den Sie abfragen möchten, und der Parameter h wird verwendet, um die Kopfzeile der Ergebnistabelle zu unterdrücken (ohne diese Option würden Sie eine "PID"-Kopfzeile über der PID selbst sehen). nicht, dass, wenn es mehr als einen Prozess mit demselben Namen gibt, alle PIDs angezeigt werden.

Wenn Sie diesen Prozess beenden wollen, sollten Sie die Option verwenden:

[user@desktop ~]$ kill `ps h -o pid -C app1`

obwohl killall ist sauberer, wenn Sie nur das tun wollen (und wenn es Ihnen nichts ausmacht, alle "app1"-Prozesse zu beenden). Sie können auch verwenden head o tail wenn Sie nur die erste bzw. letzte PID haben wollen.

und ein Tipp für die Fisch Benutzer: %process wird ersetzt durch die PID von process . in Fisch könnte man also verwenden:

user@desktop ~> kill %app1

2voto

LB40 Punkte 11541

Erhalten Sie die pid von app1 mit

ps ux | awk '/app1/ && !/awk/ {print $2}'

und dann sollten Sie in der Lage sein, es zu töten....(wenn Sie jedoch mehrere Instanzen von app1 haben, können Sie sie alle töten)

1voto

farinspace Punkte 7721
pidof app1
pkill -f app1

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X