我正在尝试使用" 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命令。所以我想我不知道我在做什么
答案 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
$
提示几乎立即返回。该代码中的内容与您从命令行直接执行的操作之间的主要区别是:
在它们之间,这意味着该进程不会受到您的登录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 &