0

我想同时运行n进程(在我的情况下是模拟),所以我&像这样使用:

for i in {1..50};
do
     run simulation &
done

每次模拟完成后,我需要解析其输出文件。我的问题是我如何知道一个过程何时完成,以及在完成一个过程后我该怎么做才能调用一个函数?

编辑:我认为我需要做的是调用一个函数,该函数将调用模拟并在完成后解析其文件。在我看来,这个函数无论如何都必须是一个子进程,对吧?

谢谢!

4

3 回答 3

3

由于您似乎不想/不需要等到所有模拟完成,您可以简单地这样做:

for i in {1..50};
do
     { run simulation && parse output; } &
done
于 2012-11-01T17:15:50.523 回答
0

wait内置等待所有孩子完成。如果要为每个完成的作业执行命令,可以使用trap. 在您的情况下,waitand的组合trap应该起作用:

trap parse_output SIGCHLD
for i in {1..50}; do
  run simulation &
done
wait
于 2012-11-01T20:41:56.880 回答
0

使用wait内置实用程序。有关man bash更多信息,请参阅。在最简单的情况下,wait它本身会等待所有子进程终止。

于 2012-11-01T17:15:45.923 回答