我想在远程Linux服务器上运行一个进程,并在关闭Putty终端后保持该进程的运行状态,正确的命令是什么?
您有两个选择:
nohup some-command &
的形式运行命令,它将在后台运行命令,将其从控制台中分离,并将其输出重定向到nohup.out
。它将吞噬发送到该进程的SIGHUP信号。(当您关闭终端或注销时,SIGHUP信号将发送给由登录shell启动的所有进程,默认操作内核将杀死该进程。这就是为什么追加&
将进程放入后台不足以使其在注销后生存的原因)不要使用那个 nohup 垃圾,我讨厌在服务器上看到它;screen 是一堆无用的位和腐烂 -- 使用 tmux。
如果你想要将一个进程放到后台运行,就像自古以来的每个守护进程一样,进行双重 fork:
# ((exec sleep 30)&)
# grep PPid /proc/`pgrep sleep`/status
PPid: 1
# jobs
# disown
bash: disown: current: no such job
享受。
括号中启动的命令
(command &)
将在原始 shell 死亡后继续存在。
SIGHUP
信号,您的进程仍将被关闭。 - Hasturkun
nohup
? - Damonnohup
解决这个任务是对一个100%无问题的变通方法...我不知道为什么nohup
成为常见的“解决方案”,也不知道上述方法存在技术限制。双重fork很干净、快速(避免了fork,如果有所影响),保留了SIGHUP的正确使用,并且适用于自~30年以来的任何shell。虽然我不能即兴引用细节,但在nohup
下运行未知地应用程序并正当地使用SIGHUP(有许多)的时候,nohup
曾经对我产生过一些影响。 - anthonyrisinger