Antworten:
Der Schlüssel ist der Befehl "wait":
#!/bin/bash
/my/process &
/another/process &
wait
echo "All processes done!"
cmd1 & p=$!; cmd2 & q=$!; while sleep 1; do echo still running ; done& wait $p $q; kill $!;
Mit können waitSie die Granularität haben, die Sie benötigen:
sleep 1 &
PID1=$!
sleep 2 &
PID2=$!
wait $PID1
echo 'PID1 has ended.'
wait
echo 'All background processes have exited.'
Hier ist eine Möglichkeit, dies zu tun:
launch backgroundprocess &
PROC_ID=$!
while kill -0 "$PROC_ID" >/dev/null 2>&1; do
echo "PROCESS IS RUNNING"
done
echo "PROCESS TERMINATED"
exit 0
waitbesser 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.
nohup command &
nohupSchreiben Sie auf die Gefahr des Haarspaltens nichts an nohup.out; es lediglich erstellt die Datei und leitet die Ausgabe des Befehls zu. (2) Wenn der Befehl keine Ausgabe erzeugt, wird nichts geschrieben nohup.out, und diese Idee geht nirgendwo so schnell. (3) commandWie können Sie feststellen, wann eine Schreibausgabe endet, indem Sie diese Ausgabe überwachen?
lsofum festzustellen, ob nohupnoch verwendet wird nohup.out, aber ich bin damit einverstanden, dass dies eine sehr haarige Methode ist.
commandlaufen beginnt, nohupist es vorbei. (1) Ja, ich wiederhole eine Nummer, weil ich wiederhole, was ich vor zwei Jahren gesagt habe: nohupSchreibe nichts an nohup.out. (5) Ja, Sie können ein Shell-Skript schreiben, um eine Schleife zu erstellen und lsofzu prüfen, ob nohup.outes 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 die nohup.outDatei geöffnet hat ? Sie möchten wirklich überprüfen, ob dieser bestimmte Prozess nohup.outoffen war. (7) Aber wenn Sie das tun wollen, warum nicht einfach prüfen, ob der Prozess läuft?