我想从一个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. 如何运行现有的停止容器并进入bash?
- 5. CCAction:停止并运行
- 6. Lua模式在行结束时停止
- 7. 在Bash中运行文件并运行命令
- 8. Pm2进程停止运行
- 9. 停止并重新运行一个线程里面本身
- 10. openerp-server停机并停止运行
- 11. 阅读node.js的一个文本文件,并处理行结束
- 12. 当另一个线程运行时,WPF动画停止运行
- 13. 并行运行bash脚本
- 14. 并行运行bash脚本?
- 15. Ruby运行两个进程,将结果输出到终端,并安全结束
- 16. 如何停止一个线程在其他结束
- 17. 停止并行并行。对于
- 18. Python:运行一个进程并杀死它,如果它不在一小时内结束
- 19. 合并多个flv文件 - 运行时
- 20. 运行一批进程并报告每个进程的进度
- 21. bash:并行运行cURL比一个接一个慢
- 22. Bash linux:并行启动多个程序,并在完成时停止所有程序
- 23. 在Python中运行并发.jar进程
- 24. 当Twilio呼叫结束时KRL规则是否停止运行?
- 25. 导入并运行一个文件
- 26. 在运行时创建jrxml文件并在运行时修改
- 27. 如何停止覆盖并在python文本文件中执行?
- 28. 如何结束在另一个仓库中运行的另一个git进程?
- 29. 并行在bash
- 30. 逐行读取文件并在bash中执行每个操作
你想如何停止第二个?用“杀”? –