我想從一個bash文件中並行啓動兩個C代碼,第二個代碼在第一個結束時停止。 指令等待期望兩個進程停止,這不是我想要做的。 感謝您的任何建議。Bash文件:並行運行進程,並在其中一個結束時停止
回答
GNU parallel可以做這種工作。檢查termination部分,它可以根據退出代碼(無論成功或失敗關機下剩餘的所有進程:
parallel -j2 --halt now,success=1 ::: 'cmd1 args' 'cmd2 args'
當作業的一個成功完成,這將TERM信號發送到其他工作(如果工作不。終止的它會強制使用KILL信號)
謝謝。我已經用GNU並行20130922嘗試了這個命令,但是按照您在鏈接中指示的教程,但是得到:值「now,success = 1」對於選項暫停(預計數字)無效 – baptiste
在版本* 20161222 *(Ubuntu 17.04 default版本)的作品。看起來這種變化是在[2015年期間]引入的(http://git.savannah.gnu.org/cgit/parallel.git/commit/?id=8110572719461a6019b8f4c22d5ebf43f65cfbe6)。嘗試使用* - halt -2 *,這似乎是以前的格式。 –
好的,這是有效的。當第一個成功時停止,而不是在第一個失敗時停止。然後我在命令結尾處引入了一個錯誤,我知道它會先完成。 – baptiste
wait -n
是你在找什麼。它等待下一個工作完成。如果您想殺死它們,您可以使用jobs -p
列出剩餘作業的PID列表。
prog1 & pids=($!)
prog2 & pids+=($!)
wait -n
kill "${pids[@]}"
這需要bash
。
這兩個程序是作爲後臺作業啓動的,shell等待其中一個退出。
發生這種情況時,kill
用於終止兩個進程(由於其中一個進程已經死了,這會導致錯誤)。
隨着$!
你在並行執行的最後一個命令的PID看到一些很好的例子在這裏:Bash `wait` command, waiting for more than 1 PID to finish execution
爲了您的特殊問題,我想是這樣的:
#!/bin/bash
command_master() {
echo -e "Command_master"
sleep 1
}
command_tokill() {
echo -e "Command_tokill"
sleep 10
}
command_master & pid_master=($!)
command_tokill & pid_tokill=($!)
wait "$pid_master"
kill "$pid_tokill"
謝謝。殺死的過程是一個C代碼,我想告訴它它將被殺死,並有時間關閉文件。基本上從主控制器發送一個信號到進程中,使其進入一個循環並在被殺死之前進行最後的操作。那可能嗎? – baptiste
例如,當完成主設備時,向C文件runMe.c發送一個整數給RunMe 1,以便它進入C代碼中的最後一個循環。 – baptiste
我明白你的問題。不幸的是,我還沒有提出一個乾淨的bash解決方案。對於一個乾淨的解決方案,我們必須關心一些同步,我不知道bash是否真的很方便。例如,在我的示例中,沒有針對以下情況的保護:「toKill」過程在「主」過程之前結束。如果在等待「$ pid_master」期間,操作系統啓動另一個與前一個「toKill」相同的PID進程,那麼bash指令殺死「$ pid_tokill」會殺死錯誤的進程。 –
- 1. 如何在init.d進程中運行並停止bash腳本?
- 2. 運行多個線程,並停止一旦一個已停止
- 3. 並行運行多個進程但在bash中一起退出
- 4. 如何在另一個進程停止運行時結束批處理腳本
- 5. linux - 運行一個進程並同時拖拽一個文件
- 6. 停止並運行在JavaScript
- 7. 如何運行現有的停止容器並進入bash?
- 8. 如何在Linux中運行後臺php進程並結束它?
- 9. CCAction:停止並運行
- 10. 停止CRF ++運行並恢復運行
- 11. Lua模式在行結束時停止
- 12. 在bash中並行運行有限數量的子進程?
- 13. Pm2進程停止運行
- 14. 在Bash中運行文件並運行命令
- 15. 爲什麼docker運行-t讓bash進程退出並停止容器
- 16. 在Python中合併兩個文件並對其進行排序
- 17. 停止並重新運行一個線程裏面本身
- 18. 並行運行一個exe文件
- 19. openerp-server停機並停止運行
- 20. 在shell中並行運行多個命令並將其保存在文件中
- 21. 如何停止運行多個進程
- 22. 同時運行進程,Bash
- 23. 問題正在運行並停止CFRunLoop
- 24. BASH中N進程批處理的並行運行
- 25. 閱讀node.js的一個文本文件,並處理行結束
- 26. Shell,運行四個並行進程
- 27. 當另一個線程運行時,WPF動畫停止運行
- 28. 如何讓Python程序進入函數並在運行時用Ctrl + X結束?
- 29. Bash腳本通過運行4個進程並行完成21進程
- 30. 並行運行bash腳本?
你想如何停止第二個?用「殺」? –