并行化bash脚本和条件中断
我已经看到很多关于并行化 bash 脚本的问题,但到目前为止我还没有找到一个能回答我的问题的问题。
我有一个 bash 脚本,它按顺序运行两个 python 脚本(python 脚本的事实并不重要,它可以是任何其他 bash 作业):
python script_1.py
python script_2.py
现在,假设 script_1.py 需要一定的(未知)时间才能完成,而 script_2.py 有一个无限循环。
我想并行运行这两个脚本,当 script_1.py 完成执行时,我也想杀死 script_2.py。
请注意,我对在 python 脚本中执行此操作不感兴趣,但我有兴趣从 bash 的角度执行此操作。
我的想法是创建 2 个“子”bash 脚本:bash_1.sh 和 bash_2.sh,并从如下所示的 main_bash.sh 脚本并行运行它们:
bash_1.sh & bash_2.sh
每个 bash_i.sh 作业运行一个 script_i.py 脚本。
但是,一旦第一个无限循环完成,这不会终止第二个无限循环。有没有办法做到这一点,添加某种条件,当另一个脚本完成时杀死一个脚本?
作为附加(不太重要)的一点,我对监视第一个脚本的终端输出感兴趣,但对监视第二个脚本的终端输出不感兴趣。
回答
如果你的脚本需要在该序列开始,你可以wait在bash_1完成:
bash_1 &
b1=$!
bash_2 &
b2=$!
wait $b1
kill $b2