2016-07-28 131 views
0

我希望这个问题没有被问过太多次,但我在google上找不到答案(我不知道如何指定它)。执行同时执行的命令并在完成时退出

有人知道如何在bash中执行两条并行命令,但是当完成后,我希望另一个完成?

举例来说,我有两个不同的Python脚本:

  • while 1: pass:loop.py
  • print(42):print.py

我想这样做python3 loop.py ** python3 print.py。这两个脚本必须平行运行,打印完成后,循环将自动结束。

我该命令的使用将是使这样的:

tcpdump -i any -w out.trace ** python3 network_script.py 

预先感谢您

+1

''&&不并行运行它们。它运行第一个,然后*运行第二个,如果第一个退出状态为0. – chepner

+0

好吧,我将编辑我的文章 –

回答

1

你想要的是

tcpdump ... & pid=$! 
python3 network_script.py 
kill $pid 

在后台运行的第一个脚本,然后启动第二个脚本。当第二个脚本结束时,杀掉第一个脚本。

+0

哇,很好的回答:) Shell变量$! (最后执行的命令的PID)绝对是我需要的。非常感谢 –

0

不是最干净的解决方案,但是您可以在后台启动进程,其尾部为&,然后wait为他们完成。

这些进程中的每一个都必须在完成时杀死所有其他进程。

它看起来是这样的:

(python loop.py && killall Python) & 
(python print.py && killall Python) & 
wait 
echo "Done with at least one!" 
+1

'killall Python'不会被限制在这两个'python'进程中。 – chepner

+0

是的,它会杀死所有的python进程:D但是也许你没有。 – fafl