2009-01-09 106 views
4

喂我与使用的rcS脚本启动模拟器的工作,这是我的脚本执行多项任务

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

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

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

线

+0

你可能要替换 “./exit” 只用 “退出”,退出shell脚本。如果您实际上在该目录中运行一个名为'exit'的可执行文件或脚本,我建议将其重命名为不太令人混淆的内容。 – 2009-01-10 21:48:50

回答

8

您可以使用等待:

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

从bash的手册页:

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

+0

注意,如果你试图运行一个php脚本,配置php会阻止进程在后台运行输出任何东西。我发现很难让Google知道如何打开默认行为。我最终发现了这个问题:http://serverfault.com/q/564720/210994 – ThorSummoner 2015-01-15 21:39:14

4

东西(我假设的bash shell)

+0

打我吧:) – 2009-01-09 23:58:20

5

xargs可以支持并行

所以就像这样:

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

哪个标志是激活并行执行的标志?并且所有的子处理都几乎在同一时间开始? – ThorSummoner 2015-01-15 20:55:55