我有一个 Perl 脚本,它向 SGE 提交了一堆数组作业。我希望所有作业并行运行以节省时间,并且脚本等待它们全部完成,然后继续下一个处理步骤,该步骤集成来自所有 SGE 输出文件的信息并生成最终输出。
为了将所有作业发送到后台然后等待,我使用 Parallel::ForkManager 和一个循环:
$fork_manager = new Parallel::ForkManager(@as);
# @as: Max nb of processes to run simultaneously
for $a (@as) {
$fork_manager->start and next; # Starts the child process
system "qsub <qsub_options> ./script.plx";
$fork_manager->finish; # Terminates the child process
}
$fork_manager->wait_all_children;
<next processing step, local>
然而,为了让“等待”部分工作,我不得不在 qsub 选项中添加“-sync yes”。但作为一个“副作用”,SGE 会为每个数组作业中的每个任务打印退出代码,并且由于有许多作业并且单个任务很轻,因此由于所有这些中断消息,它基本上使我的 shell 无法使用,而qsub 作业正在运行。
我怎样才能摆脱这些消息?如果有的话,我有兴趣检查 qsub 的作业退出代码(这样我可以在下一步之前检查一切是否正常),但不是每个任务的一个退出代码(无论如何我通过选项 -e 记录任务的错误以防我需要它)。