Ich habe einen Cron-Job, der alle 8 Stunden ein Shell-Skript startet, die wiederum eine Reihe von Programmen aufruft. Manchmal werden diese Programme nicht ordnungsgemäß beendet und sie bleiben in der Schwebe stecken.Finden Sie PID von jedem Prozess im Shell-Skript aufgerufen
Also, wenn mein cron'd Skript (run_foo_bar.sh
) sieht wie folgt aus:
python foo.py
python bar.py
... ich mehrere Foo und Bar des gleichzeitig laufen haben. Gerade jetzt bekomme ich die PIDs beteiligt, indem Sie eine ps -ax |grep foo
machen und dann die Laufzeit finden mit ps -p $PID -o etime=
, aber das wird umständlich.
Die Python-Programme enthalten eine Reihe von Debug-Anweisungen, die auf die Konsole gedruckt werden, und das Shell-Skript selbst wird an Protokolldateien weitergeleitet. Ich wollte einen Weg finden, der die PID jedes Prozesses Echo würde, sobald sie zusammen mit ihrem Aufruf Zeit aufgerufen wird, so meine run_foo_bar.sh würde wie folgt aussehen:
date
python foo.py
<some magic to find PID>
echo foo.py is running as PID $PID
date
python bar.py
<some magic to find PID>
echo bar.py is running as PID $PID
können Sie nicht etwas zum Python-Code hinzufügen, so dass es seine PID selbst melden und auf std-out setzen kann? Viel Glück. – shellter
Vielleicht [das] (https://stackoverflow.com/a/13202292/2877364)? – cxw
Gegenwärtig wird 'python foo.py' ausgeführt, bis' foo.py' beendet wird, an diesem Punkt gibt es keine PID mehr zu bekommen. Würden Sie bitte klären? Verschiebt sich 'foo.py' in den Hintergrund oder so? Woher weißt du, wenn ein Prozess "in der Schwebe steckt"? – cxw