nohup"不起作用"的mpirun

时间:2018-01-17 08:06:41

标签: linux nohup

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

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

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

当我离开终端时,在不同核心上运行的进程被终止。

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

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

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

Forwarding signal 20 to job

我无法实际停止mpirun命令。所以我想我不知道我在做什么

2 个答案:

答案 0 :(得分:1)

后台运行的作业仍由您的登录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当时检查版本控制 - SCCS - 1987-08-10。)

对于您的流程,您将运行:

$ bk mpirun -np 8 solverName -parallel
$

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

  1. 有一个shell脚本的子进程,它会立即终止。
  2. 脚本本身在后台的子shell中运行命令。
  3. 在它们之间,这意味着该进程不会受到您的登录shell的干扰;它不了解孙子的过程。

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

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

    圆括号开始子壳;子shell在后台运行nohup并进行I / O重定向并终止。 continue命令是登录shell的孙子,不会受到登录shell的干扰。

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

答案 1 :(得分:0)

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

$ 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 &

它对我有用。 告诉我们它是否适合你。