bash 等待特定进程结束

这是我写的某个测试的脚本:

  1. B 需要等待 A 程序先运行起来之后才能启动。
  2. A 退出之后,应该中止 B。
  3. 代码能保证 B 不会在 A 之前中止。
#!/bin/bash

./build/test/A -n 5000 &
PROC_A=$!
sleep 3
python test/B.py &
PROC_B=$!
tail --pid=$PROC_A -f /dev/null
kill $PROC_B

tail --pid=$PROC_A -f /dev/null 这一句是等待特定进程结束的关键。参考 https://stackoverflow.com/questions/1058047/wait-for-a-process-to-finish

(不过,这个脚本还有一个问题,当脚本收到 ^C 中止时,如果 shell 还在,那么两个进程会因为是后台进程而无法收到中止信号。这下大家都知道我写的测试很垃圾了>﹏<。)