我想从一个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脚本?
你想如何停止第二个?用“杀”? –