Alle diese Lösungen werden in Ubuntu 14.04 getestet:
Lösung 1 (mit dem Befehl ps):
Um die Antwort von Pierz zu addieren, würde ich vorschlagen:
while ps axg | grep -vw grep | grep -w process_name > /dev/null; do sleep 1; done
grep -vw grep
Stellt in diesem Fall sicher, dass grep nur mit process_name und nicht mit grep selbst übereinstimmt. Es hat den Vorteil, dass Fälle unterstützt werden, in denen der Prozessname nicht am Ende einer Zeile bei steht ps axg
.
Lösung 2 (unter Verwendung des Befehls top und des Prozessnamens):
while [[ $(awk '$12=="process_name" {print $0}' <(top -n 1 -b)) ]]; do sleep 1; done
Ersetzen Sie process_name
durch den Prozessnamen, der in angezeigt wird top -n 1 -b
. Bitte halten Sie die Anführungszeichen.
Um die Liste der Prozesse anzuzeigen, auf deren Abschluss Sie warten, können Sie Folgendes ausführen:
while : ; do p=$(awk '$12=="process_name" {print $0}' <(top -n 1 -b)); [[ $b ]] || break; echo $p; sleep 1; done
Lösung 3 (unter Verwendung des Befehls top und der Prozess-ID):
while [[ $(awk '$1=="process_id" {print $0}' <(top -n 1 -b)) ]]; do sleep 1; done
Ersetzen Sie process_id
durch die Prozess-ID Ihres Programms.