Wie kann ich einen Prozess im Hintergrund starten und prüfen, wann er in einem Bash-Skript endet? Meine Idee ist ein Skript wie dieses:
launch backgroundprocess &
while [ Process is running ];do
echo "PROCESS IS RUNNING\r"
done;
echo "PROCESS TERMINATED"
cmd1 & p=$!; cmd2 & q=$!; while sleep 1; do echo still running ; done& wait $p $q; kill $!;
Mit können
wait
Sie die Granularität haben, die Sie benötigen:quelle
Hier ist eine Möglichkeit, dies zu tun:
quelle
wait
besser geeignet?Sie können Ihren Prozess mit nohup ausführen und ein Shell-Skript schreiben, um die Datei nohup.out zu lesen, die von nohup zum Protokollieren verwendet wird.
quelle
nohup
Schreiben Sie auf die Gefahr des Haarspaltens nichts annohup.out
; es lediglich erstellt die Datei und leitet die Ausgabe des Befehls zu. (2) Wenn der Befehl keine Ausgabe erzeugt, wird nichts geschriebennohup.out
, und diese Idee geht nirgendwo so schnell. (3)command
Wie können Sie feststellen, wann eine Schreibausgabe endet, indem Sie diese Ausgabe überwachen?lsof
um festzustellen, obnohup
noch verwendet wirdnohup.out
, aber ich bin damit einverstanden, dass dies eine sehr haarige Methode ist.command
laufen beginnt,nohup
ist es vorbei. (1) Ja, ich wiederhole eine Nummer, weil ich wiederhole, was ich vor zwei Jahren gesagt habe:nohup
Schreibe nichts annohup.out
. (5) Ja, Sie können ein Shell-Skript schreiben, um eine Schleife zu erstellen undlsof
zu prüfen, obnohup.out
es noch offen ist. Aber das wäre eine andere Antwort. (6) Selbst wenn Sie das tun würden, wäre es unzuverlässig. Was ist, wenn ein anderer Prozess dienohup.out
Datei geöffnet hat ? Sie möchten wirklich überprüfen, ob dieser bestimmte Prozessnohup.out
offen war. (7) Aber wenn Sie das tun wollen, warum nicht einfach prüfen, ob der Prozess läuft?