我使用mpi在并行模式下运行LAMMPS,我发现了一些奇怪的事情。
如果我关闭启动进程的shell,则会终止从属进程,但主服务器不会被执行:
(使用开放式shell)
valesori@eris:~$ ps aux | grep lammps
valesori 3985 0.2 0.0 208124 7508 pts/26 Sl+ 13:59 0:00 mpirun -np 4 lammps -in in.create_bonds
valesori 3987 96.9 0.2 406148 21956 pts/26 Rl 13:59 0:09 lammps -in in.create_bonds
valesori 3988 94.2 0.2 406060 22192 pts/26 Rl 13:59 0:09 lammps -in in.create_bonds
valesori 3989 98.5 0.2 406040 21888 pts/26 Rl 13:59 0:09 lammps -in in.create_bonds
valesori 3991 94.2 0.2 406044 21944 pts/26 Rl 13:59 0:09 lammps -in in.create_bonds
valesori 4102 0.0 0.0 14228 936 pts/27 S+ 13:59 0:00 grep lammps
(封闭的外壳)
valesori@eris:~$ ps aux | grep lammps
valesori 3985 15.1 0.1 208124 8244 ? Rl 13:59 0:04 mpirun -np 4 lammps -in in.create_bonds
valesori 4285 0.0 0.0 14228 924 pts/27 S+ 13:59 0:00 grep lammps
我唯一注意到的是主进程的状态从Sl +变为R1。 R应该代表"运行/运行" S应该代表"可中断睡眠(等待事件完成)&#34 ;; l表示该进程是多线程的+并且它位于前台进程组中(例如参见this network post)。
如果我在串行模式下启动相同的脚本,那么当shell关闭时,该过程将被正常终止。
这是一个已知的mpi错误吗?如果没有,可能是什么原因?
(我使用的是Open MPI版本1.10.2)
更新
我实际上意识到结果在某种程度上是不可重复的。到目前为止,我有三种不同的结果: