Ini memulai kedua proses, menunggu yang pertama selesai dan kemudian membunuh yang lain:
#!/bin/bash
{ cd ./frontend && gulp serve; } &
{ cd ./backend && gulp serve --verbose; } &
wait -n
pkill -P $$
Bagaimana itu bekerja
Mulailah:
{ cd ./frontend && gulp serve; } &
{ cd ./backend && gulp serve --verbose; } &
Dua perintah di atas memulai kedua proses di latar belakang.
Tunggu
wait -n
Ini menunggu pekerjaan latar belakang untuk berakhir.
Karena -n
opsi, ini membutuhkan bash 4.3 atau lebih baik.
Membunuh
pkill -P $$
Ini membunuh pekerjaan apa pun yang prosesnya saat ini adalah induknya. Dengan kata lain, ini membunuh semua proses latar belakang yang masih berjalan.
Jika sistem Anda tidak memiliki pkill
, coba ganti baris ini dengan:
kill 0
yang juga membunuh grup proses saat ini .
Contoh mudah diuji
Dengan mengubah skrip, kami dapat mengujinya bahkan tanpa gulp
diinstal:
$ cat script.sh
#!/bin/bash
{ sleep $1; echo one; } &
{ sleep $2; echo two; } &
wait -n
pkill -P $$
echo done
Script di atas dapat dijalankan sebagai bash script.sh 1 3
dan proses pertama berakhir terlebih dahulu. Atau, seseorang dapat menjalankannya bash script.sh 3 1
dan proses kedua akan berakhir terlebih dahulu. Dalam kedua kasus, orang dapat melihat bahwa ini beroperasi seperti yang diinginkan.
gulp ./fronend/serve && gulp ./backend/serve --verbose
?