2016-07-28 169 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