【问题标题】:Finding pid of the mpirun command查找 mpirun 命令的 pid
【发布时间】:2014-11-06 16:15:02
【问题描述】:

我发出一个 mpirun 命令后,我想得到这个进程的 pid,以便我以后可以杀死这个进程。如何在无需在 mpirun 命令末尾添加“&”将其发送到后台的情况下执行此操作?

其他情况是机器上可能有多个 mpirun 进程在运行。

【问题讨论】:

    标签: linux shell mpi


    【解决方案1】:

    你可以使用'ps'来获取pid

    ps -A | grep process-name
    

    【讨论】:

      【解决方案2】:
      ps aux | grep application_name
      

      这种语法在 Ubuntu 上运行良好,但我不知道它是否适用于其他发行版。它返回(至少)两个不同的行:一个包含当前搜索进程的 pid,另一个包含您正在搜索的进程的 pid。程序 PID 只是列表的第二列。

      您可以运行man psps --help查看ps命令的手册。

      要终止进程,请检查命令 pkill killkillall 的选项

      【讨论】:

        【解决方案3】:

        除了将& 和使用$! 然后%mpirun 进程bash 放到前台:

        $ mpirun -np 4 ./a.out &
        [1] 12345
        $ PID=$!
        $ %
        ...
        

        您可以使用pkill 命令来终止它,例如pkill mpirun 但您需要确保只运行一个 mpirun 进程,或者您可以编写 MPI 程序,以便将其 PID 写入文件,然后读取该文件,就像许多 UNIX 守护进程一样。

        【讨论】:

          【解决方案4】:

          使用 Open MPI,可以通过给 --report-pid 选项来指示 mpirun 输出自己的 PID:

          • --report-pid -将PID输出到标准输出;
          • --report-pid +输出PID到标准错误;
          • --report-pid /path/to/filename 将 PID 写入 filename

          要获取所有正在运行的mpiruns 的 PID,请使用:

          $ pgrep -u `whoami` mpirun
          

          【讨论】:

          • 非常感谢!这在我使用 openmpi 时有效。它可以与其他 mpi 实现一起使用吗?
          • 不,--report-pid 严格特定于 orterun(Open MPI 中的作业启动器)。我找不到 Hydra(MPICH 中的启动器)的类似选项。
          猜你喜欢
          • 2011-04-06
          • 2013-03-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-12-08
          相关资源
          最近更新 更多