Tất cả các giải pháp này đều được thử nghiệm trong Ubuntu 14.04:
Giải pháp 1 (bằng cách sử dụng lệnh ps):
Chỉ cần thêm vào câu trả lời của Pierz, tôi sẽ đề xuất:
while ps axg | grep -vw grep | grep -w process_name > /dev/null; do sleep 1; done
Trong trường hợp này, grep -vw grep
đảm bảo rằng grep chỉ khớp với process_name và không phải chính grep. Nó có lợi thế là hỗ trợ các trường hợp trong đó process_name không ở cuối dòng tại ps axg
.
Giải pháp 2 (bằng cách sử dụng lệnh trên và tên quy trình):
while [[ $(awk '$12=="process_name" {print $0}' <(top -n 1 -b)) ]]; do sleep 1; done
Thay thế process_name
bằng tên quy trình xuất hiện trongtop -n 1 -b
. Hãy giữ dấu ngoặc kép.
Để xem danh sách các quy trình mà bạn chờ đợi chúng kết thúc, bạn có thể chạy:
while : ; do p=$(awk '$12=="process_name" {print $0}' <(top -n 1 -b)); [[ $b ]] || break; echo $p; sleep 1; done
Giải pháp 3 (bằng cách sử dụng lệnh trên và ID tiến trình):
while [[ $(awk '$1=="process_id" {print $0}' <(top -n 1 -b)) ]]; do sleep 1; done
Thay thế process_id
bằng ID tiến trình của chương trình của bạn.