554 Stimmen

Wie erhalte ich die Prozess-ID eines Hintergrundprozesses?

Ich starte einen Hintergrundprozess aus meinem Shell-Skript und möchte diesen Prozess beenden, wenn mein Skript beendet ist.

Wie bekomme ich die PID dieses Prozesses aus meinem Shell-Skript? Soweit ich sehen kann, ist die Variable $! enthält die PID des aktuellen Skripts, nicht des Hintergrundprozesses.

4voto

villaa Punkte 894

Vielleicht können Sie auch pstree verwenden:

pstree -p user

Dies liefert normalerweise eine Textdarstellung aller Prozesse für den "Benutzer" und die Option -p liefert die Prozess-ID. Soweit ich weiß, hängt es nicht davon ab, ob die Prozesse im Besitz der aktuellen Shell sind. Es zeigt auch Forks an.

4voto

errant.info Punkte 300

pgrep können Sie alle Kind-PIDs eines Elternprozesses ermitteln. Wie bereits erwähnt $$ ist die PID des aktuellen Skripts. Wenn Sie also ein Skript wollen, das nach sich selbst aufräumt, sollte dies den Zweck erfüllen:

trap 'kill $( pgrep -P $$ | tr "\n" " " )' SIGINT SIGTERM EXIT

0voto

matttrach Punkte 85

Ich bin bei der Bereitstellung verschiedener Infrastrukturobjekte schon oft auf dieses Problem gestoßen. Oftmals benötigt man einen temporären Proxy mit kubectl oder eine temporäre Portweiterleitung. Ich habe die Timeout Befehl eine gute Lösung, da mein Skript dadurch in sich geschlossen ist und ich sicher sein kann, dass der Prozess beendet wird. Ich versuche, kleine Zeitüberschreitungen festzulegen und das Skript erneut auszuführen, wenn ich es noch benötige.

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