Все эти решения протестированы в Ubuntu 14.04:
Решение 1 (с помощью команды ps):
просто, чтобы добавить к ответу Pierz, я бы предложил:
while ps axg | grep -vw grep | grep -w process_name > /dev/null; do sleep 1; done
В этом случае grep -vw grep
гарантирует, что grep соответствует только process_name, а не самому grep. Преимущество заключается в поддержке случаев, когда имя_процесса находится не в конце строки в ps axg
.
Решение 2 (с помощью команды top и имени процесса):
while [[ $(awk '$12=="process_name" {print $0}' <(top -n 1 -b)) ]]; do sleep 1; done
Замените process_name
на имя процесса, которое отображается в top -n 1 -b
. Пожалуйста, сохраняйте кавычки.
Чтобы увидеть список процессов, которые вы ожидаете, чтобы завершить их, вы можете запустить:
while : ; do p=$(awk '$12=="process_name" {print $0}' <(top -n 1 -b)); [[ $b ]] || break; echo $p; sleep 1; done
Решение 3 (с помощью команды top и идентификатора процесса):
while [[ $(awk '$1=="process_id" {print $0}' <(top -n 1 -b)) ]]; do sleep 1; done
Замените process_id
на идентификатор процесса вашей программы.