Wszystkie te rozwiązania są testowane w Ubuntu 14.04:
Rozwiązanie 1 (za pomocą polecenia ps):
Aby dodać do odpowiedzi Pierz, proponuję:
while ps axg | grep -vw grep | grep -w process_name > /dev/null; do sleep 1; done
W tym przypadku grep -vw grep
zapewnia, że grep pasuje tylko do procesu nazwa_procesu, a nie do samego grep. Ma tę zaletę, że obsługuje przypadki, w których nazwa_procesu nie znajduje się na końcu wiersza w ps axg
.
Rozwiązanie 2 (używając najwyższego polecenia i nazwy procesu):
while [[ $(awk '$12=="process_name" {print $0}' <(top -n 1 -b)) ]]; do sleep 1; done
Zastąp process_name
nazwę procesu, która pojawia się w top -n 1 -b
. Proszę zachować cudzysłowy.
Aby zobaczyć listę procesów, które czekasz na zakończenie, możesz uruchomić:
while : ; do p=$(awk '$12=="process_name" {print $0}' <(top -n 1 -b)); [[ $b ]] || break; echo $p; sleep 1; done
Rozwiązanie 3 (przy użyciu polecenia górnego i identyfikatora procesu):
while [[ $(awk '$1=="process_id" {print $0}' <(top -n 1 -b)) ]]; do sleep 1; done
Zastąp process_id
identyfikatorem procesu swojego programu.