nohup "does not work" MPIrun

nohup "does not work" MPIrun

我正在尝试使用 "nohup" 命令来避免在 linux MATE 上退出终端时终止后台进程。

我想要运行的进程是一个MPI运行进程,我使用以下命令:

nohup mpirun -np 8 solverName -parallel >log 2>&1

当我离开终端时,不同内核上的进程 运行ning 被杀死。

我在日志文件中提到的另一件事是,如果我尝试 运行 以下命令

mpirun -np 8 solverName -parallel >log 2>&1

然后按 CTRL+Z(停止进程)日志文件显示:

Forwarding signal 20 to job

而且我实际上无法停止 mpi运行 命令。所以我想我在做什么我不明白

要终止进程,您需要以下命令。 第一:

$ jobs -l

这给你这样的进程的 PID

[1]+ 47274 Running nohup mpirun -np 8 solverName -parallel >log 2>&1

然后执行以下命令杀死进程。

kill -9 {program PID i.e 47274 }

这将帮助您终止进程。

请注意,ctrl+Z 不会终止进程,但会暂停它。

对于问题的第一部分,我建议尝试这个命令,看看它是否有效。

nohup nohup mpirun -n 8 --your_flags ./compited_solver_name > Output.txt &

它对我有用。 如果它不适合您,请告诉我们。

后台的作业运行仍然属于您的登录shell(nohup命令在mpirun命令终止之前不会退出),所以当您断开连接时,它会发出信号。这个脚本(我叫它bk)是我用的:

#!/bin/sh
#
# @(#)$Id: bk.sh,v 1.9 2008/06/25 16:43:25 jleffler Exp $"
#
# Run process in background
# Immune from logoffs -- output to file log

(
echo "Date: `date`"
echo "Command: $*"
nice nohup "$@"
echo "Completed: `date`"
echo
) >>${LOGFILE:=log} 2>&1 &

(如果你有好奇心,请注意谨慎使用 $*"$@"nice 运行 当我不在那里。1.1 版已在 1987 年 8 月 10 日签入版本控制(当时为 SCCS)。)

对于您的流程,您需要 运行:

$ bk mpirun -np 8 solverName -parallel
$

提示 returns 几乎立即。该代码中的内容与您直接从命令行执行的内容之间的主要区别是:

  1. shell 脚本有一个子进程,它会立即终止。
  2. 脚本本身运行是后台子shell中的命令。

在它们之间,这些意味着该过程不受您的登录干扰shell;它不知道孙进程。

运行 直接在命令行上,你会写:

(nohup mpirun -np 8 solverName -parallel >log 2>&1 &)

括号开始一个子shell; sub-shell 运行s nohup 在后台使用 I/O 重定向并终止。继续命令是您登录 shell 的孙子,不受您登录 shell.

的干扰

我不是 mpirun 方面的专家,从未使用过它,所以它可能会做一些我意想不到的事情。我对手册页的印象是它的行为或多或少像一个常规进程,即使它可以 运行 多个其他进程,可能在多个节点上。也就是说,它 运行 是其他进程,但监视和协调它们,并且仅在其子进程完成时退出。如果那是正确的,那么我所概述的就足够准确了。