Điều này bắt đầu cả hai quá trình, chờ đợi quá trình đầu tiên kết thúc và sau đó giết chết quá trình khác:
#!/bin/bash
{ cd ./frontend && gulp serve; } &
{ cd ./backend && gulp serve --verbose; } &
wait -n
pkill -P $$
Làm thế nào nó hoạt động
Khởi đầu:
{ cd ./frontend && gulp serve; } &
{ cd ./backend && gulp serve --verbose; } &
Hai lệnh trên bắt đầu cả hai quá trình trong nền.
Chờ đợi
wait -n
Điều này chờ cho một trong hai công việc nền kết thúc.
Do -n
tùy chọn, điều này đòi hỏi bash 4.3 hoặc tốt hơn.
Giết chết
pkill -P $$
Điều này giết chết mọi công việc mà quy trình hiện tại là cha mẹ. Nói cách khác, điều này giết chết mọi quá trình nền vẫn đang chạy.
Nếu hệ thống của bạn không có pkill
, hãy thử thay thế dòng này bằng:
kill 0
mà cũng giết chết nhóm quy trình hiện tại .
Ví dụ dễ kiểm tra
Bằng cách thay đổi tập lệnh, chúng tôi có thể kiểm tra tập lệnh ngay cả khi không gulp
cài đặt:
$ cat script.sh
#!/bin/bash
{ sleep $1; echo one; } &
{ sleep $2; echo two; } &
wait -n
pkill -P $$
echo done
Kịch bản trên có thể được chạy khi bash script.sh 1 3
quá trình đầu tiên kết thúc trước. Ngoài ra, người ta có thể chạy nó bash script.sh 3 1
và quá trình thứ hai sẽ chấm dứt trước. Trong cả hai trường hợp, người ta có thể thấy rằng điều này hoạt động như mong muốn.
gulp ./fronend/serve && gulp ./backend/serve --verbose
?