【发布时间】:2014-11-06 16:15:02
【问题描述】:
我发出一个 mpirun 命令后,我想得到这个进程的 pid,以便我以后可以杀死这个进程。如何在无需在 mpirun 命令末尾添加“&”将其发送到后台的情况下执行此操作?
其他情况是机器上可能有多个 mpirun 进程在运行。
【问题讨论】:
我发出一个 mpirun 命令后,我想得到这个进程的 pid,以便我以后可以杀死这个进程。如何在无需在 mpirun 命令末尾添加“&”将其发送到后台的情况下执行此操作?
其他情况是机器上可能有多个 mpirun 进程在运行。
【问题讨论】:
你可以使用'ps'来获取pid
ps -A | grep process-name
【讨论】:
ps aux | grep application_name
这种语法在 Ubuntu 上运行良好,但我不知道它是否适用于其他发行版。它返回(至少)两个不同的行:一个包含当前搜索进程的 pid,另一个包含您正在搜索的进程的 pid。程序 PID 只是列表的第二列。
您可以运行man ps或ps --help查看ps命令的手册。
要终止进程,请检查命令 pkill kill 和 killall 的选项
【讨论】:
除了将& 和使用$! 然后% 将mpirun 进程bash 放到前台:
$ mpirun -np 4 ./a.out &
[1] 12345
$ PID=$!
$ %
...
您可以使用pkill 命令来终止它,例如pkill mpirun 但您需要确保只运行一个 mpirun 进程,或者您可以编写 MPI 程序,以便将其 PID 写入文件,然后读取该文件,就像许多 UNIX 守护进程一样。
【讨论】:
使用 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
【讨论】:
--report-pid 严格特定于 orterun(Open MPI 中的作业启动器)。我找不到 Hydra(MPICH 中的启动器)的类似选项。