【发布时间】:2018-02-21 21:59:36
【问题描述】:
在 Bash 中,我想并行调用一个命令,同时捕获所有进程的退出代码。
我知道如何启动和等待它们,但等待只会给我最后一个进程退出的退出代码。我还需要寿命较短的进程的退出代码。
不幸的是,我没有 bash 4.3,所以wait -n 不是一个选项,也不是#3004811 中建议的 gnu 并行
#16032001 几乎问了同样的问题,但也没有提供解决方案。
我目前能想到的唯一方法是编写一个帮助脚本,将退出代码存储在一个文件中,但这听起来不是一个干净的解决方案。
【问题讨论】:
-
在
C你可以做到这一点。但是您应该注意到,您必须等待所有进程一个接一个地终止。当一个进程退出时,wait家族将它们一一清理。 多个并行进程的退出状态没有意义 -
我知道我可以在 C 中做到这一点,但我在该服务器上的资源非常有限,并且通常不喜欢弄乱那里的可执行文件(它是 Xen 服务器)。也许我用了不正确的措辞,但我想开始,比如说并行 10 个备份进程,并且需要检查每个进程是否成功。
-
我明白你说的。我想说的是,没有什么神奇的东西可以得到每个进程的返回值。 see my answer here。没关系;您正在使用
bash或c任何其他人。您必须等待您拥有的任何后台进程。和see this one about wait in bash -
我不是一个经验丰富的 Unix c 程序员,但我原则上知道 fork()、wait、SIGCHILD 和僵尸进程如何协同工作。我希望有一种方法可以告诉 bash:“等待下一个后台进程退出并给出退出代码”(也许 wait -n 的作用)。或者将退出代码存储到某个变量中。真正的麻烦是,bash 不会保留僵尸,而是会立即收割它们。所以我必须在子进程退出时运行等待,否则我会错过退出代码...
标签: bash parallel-processing exit