LSF多核集群:多可执行文件同时运行的原因及阻止方法咨询
LSF集群中逗号分隔可执行文件导致并行运行的原因及解决方法
为什么逗号分隔会让两个可执行文件同时启动?
在LSF的作业脚本语法里,逗号是用来定义并行任务的分隔符。当你用exec1, exec2这样的写法时,LSF会把这两个可执行文件识别为需要并行执行的独立任务,会自动分配集群资源(比如不同的CPU核心)同时启动它们,完全不会等待前一个任务完成。这就是为什么你看到两个程序同时跑,进而导致作业无法正常终止的原因——它们各自独立运行,没有串行依赖关系。
如何防止多个可执行文件同时运行(实现串行执行)?
如果你需要让exec2在exec1完全运行结束后再启动,可以用以下几种方法:
- 用分号(
;)分隔命令:这是最直接的串行执行写法,不管exec1是否成功退出,exec2都会在exec1结束后启动:exec1; exec2 - 用逻辑与(
&&)分隔命令:这种写法更严谨,只有当exec1成功退出(返回码为0)时,exec2才会启动,适合需要确保前一步成功再执行后续任务的场景:exec1 && exec2 - 使用LSF作业依赖:如果还是想把两个可执行文件作为独立作业提交,可以利用LSF的作业依赖功能。先提交exec1的作业并记录其ID:
然后提交exec2的作业时,指定依赖条件为exec1完成:bsub ./exec1 # 假设返回的作业ID是12345bsub -w "done(12345)" ./exec2 - 在脚本中显式等待:如果你的脚本里有后台运行的任务(比如加了
&),可以用wait命令等待所有后台任务完成后再执行下一个:exec1 & wait exec2
内容的提问来源于stack exchange,提问作者simona
相关产品推荐
相关产品推荐

