สิ่งนี้เริ่มต้นทั้งสองกระบวนการรอกระบวนการแรกที่เสร็จสิ้นจากนั้นจึงฆ่ากระบวนการอื่น:
#!/bin/bash
{ cd ./frontend && gulp serve; } &
{ cd ./backend && gulp serve --verbose; } &
wait -n
pkill -P $$
มันทำงานอย่างไร
ราคาเริ่มต้น:
{ cd ./frontend && gulp serve; } &
{ cd ./backend && gulp serve --verbose; } &
คำสั่งสองคำสั่งข้างต้นเริ่มกระบวนการทั้งสองในพื้นหลัง
รอ
wait -n
สิ่งนี้จะรอให้งานพื้นหลังสิ้นสุดลง
เนื่องจาก-n
ตัวเลือกนี้ต้องใช้ทุบตี 4.3 หรือดีกว่า
ฆ่า
pkill -P $$
นี่จะฆ่างานใด ๆ ที่กระบวนการปัจจุบันเป็นพาเรนต์ กล่าวอีกนัยหนึ่งสิ่งนี้ฆ่ากระบวนการพื้นหลังใด ๆ ที่ยังคงทำงานอยู่
หากระบบของคุณไม่มีpkill
ลองเปลี่ยนสายนี้ด้วย:
kill 0
ซึ่งฆ่ากลุ่มกระบวนการปัจจุบันด้วย
ตัวอย่างที่ทดสอบได้ง่าย
โดยการเปลี่ยนสคริปต์เราสามารถทดสอบได้โดยไม่ต้องgulp
ติดตั้ง:
$ cat script.sh
#!/bin/bash
{ sleep $1; echo one; } &
{ sleep $2; echo two; } &
wait -n
pkill -P $$
echo done
สคริปต์ข้างต้นสามารถเรียกใช้bash script.sh 1 3
และกระบวนการแรกสิ้นสุดลงก่อน อีกวิธีหนึ่งสามารถเรียกใช้เป็นbash script.sh 3 1
และกระบวนการที่สองจะสิ้นสุดลงก่อน ในทั้งสองกรณีเราจะเห็นว่าสิ่งนี้ทำงานได้ตามต้องการ
gulp ./fronend/serve && gulp ./backend/serve --verbose
?