【问题标题】:Execute several programs at the same time in an initialisation/bash script在初始化/bash 脚本中同时执行多个程序
【发布时间】:2009-01-09 23:52:02
【问题描述】:

您好,我正在使用一个使用 rcS 脚本启动的模拟器,这是我的脚本

cd /tests
./test1 &
./test2 &
./test3 &
./test4 
exit

我想要的是同时运行所有测试,并且只有在所有先前的测试都完成后才执行退出命令。不仅当测试 4 完成时,这可能吗? 谢谢。

【问题讨论】:

  • 你可能想用“exit”替换“./exit”来退出shell脚本。如果您实际上在该目录中运行名为“exit”的可执行文件或脚本,我建议将其重命名为不那么容易混淆的名称。

标签: linux bash scripting rcs


【解决方案1】:

你可以使用等待:

./test1 &
./test2 &
./test3 &
./test4 &
wait

来自 bash 手册页:

等待 [n ...] 等待每个指定的进程并返回它的 终止状态。每个 n 可以是一个 进程 ID 或工作规范;如果 给出了工作规范,所有流程都在 该工作的管道正在等待。 如果没有给出 n, 等待所有当前活动的子进程,并且 返回状态为零。如果 n 指定一个不存在的进程或 作业,返回状态为 127。 否则,返回状态为 最后的退出状态 等待的进程或作业。

【讨论】:

  • 注意,如果你试图运行一个php脚本,php的配置会阻止后台运行的进程输出任何东西。我发现谷歌很难打开默认行为。我最终找到了这个问题:serverfault.com/q/564720/210994
【解决方案2】:

xargs可以支持并行

所以就像这样:

seq 4|xargs -i -n 1 -P 4 ./test{} 

【讨论】:

  • 哪个标志是激活并行执行的标志?并且所有子处理的开始时间几乎/完全相同?
【解决方案3】:

类似

cd /tests
./test1 &
./test2 &
./test3 &
./test4 &
wait
exit

(我假设是 bash shell)

【讨论】:

    最近更新 更多