我想同时运行n
进程(在我的情况下是模拟),所以我&
像这样使用:
for i in {1..50};
do
run simulation &
done
每次模拟完成后,我需要解析其输出文件。我的问题是我如何知道一个过程何时完成,以及在完成一个过程后我该怎么做才能调用一个函数?
编辑:我认为我需要做的是调用一个函数,该函数将调用模拟并在完成后解析其文件。在我看来,这个函数无论如何都必须是一个子进程,对吧?
谢谢!
由于您似乎不想/不需要等到所有模拟完成,您可以简单地这样做:
for i in {1..50};
do
{ run simulation && parse output; } &
done
wait
内置等待所有孩子完成。如果要为每个完成的作业执行命令,可以使用trap
. 在您的情况下,wait
and的组合trap
应该起作用:
trap parse_output SIGCHLD
for i in {1..50}; do
run simulation &
done
wait
使用wait
内置实用程序。有关man bash
更多信息,请参阅。在最简单的情况下,wait
它本身会等待所有子进程终止。