Linux - 将进程运行在后台

6
我想在远程Linux服务器上运行一个进程,并在关闭Putty终端后保持该进程的运行状态,正确的命令是什么?
4个回答

10

您有两个选择:

  1. 使用GNU screen,它将允许您运行命令并将其从终端分离,稍后可以将其重新附加到不同的会话中。我用它来运行长时间运行的进程,以便随时监视其输出。Screen是一个真正强大的工具,我强烈建议花些时间去学习它。
  2. nohup some-command &的形式运行命令,它将在后台运行命令,将其从控制台中分离,并将其输出重定向到nohup.out。它将吞噬发送到该进程的SIGHUP信号。(当您关闭终端或注销时,SIGHUP信号将发送给由登录shell启动的所有进程,默认操作内核将杀死该进程。这就是为什么追加&将进程放入后台不足以使其在注销后生存的原因)

1

不要使用那个 nohup 垃圾,我讨厌在服务器上看到它;screen 是一堆无用的位和腐烂 -- 使用 tmux。

如果你想要将一个进程放到后台运行,就像自古以来的每个守护进程一样,进行双重 fork:

# ((exec sleep 30)&)
# grep PPid /proc/`pgrep sleep`/status
PPid:   1
# jobs
# disown
bash: disown: current: no such job

享受。


2
除了“我不喜欢看到它”之外,是否有紧急的原因不使用nohup - Damon
1
嗯,我想不算很急迫,除非毫无意义符合要求。使用nohup解决这个任务是对一个100%无问题的变通方法...我不知道为什么nohup成为常见的“解决方案”,也不知道上述方法存在技术限制。双重fork很干净、快速(避免了fork,如果有所影响),保留了SIGHUP的正确使用,并且适用于自~30年以来的任何shell。虽然我不能即兴引用细节,但在nohup下运行未知地应用程序并正当地使用SIGHUP(有许多)的时候,nohup曾经对我产生过一些影响。 - anthonyrisinger

1
现代化且易于使用的方法,可以管理多个进程,并具有良好的终端用户界面,这就是 hapless 工具。
通过 pip install hapless(或 python3 -m pip install hapless)进行安装,然后直接运行即可。
$ hap run my-command  # e.g. hap run python my_long_running_script.py
$ hap status  # check all the launched processes

请查看文档以获取更多信息。

ui


0

括号中启动的命令

(command &)

将在原始 shell 死亡后继续存在。


据我所知,如果 shell 收到 SIGHUP 信号,您的进程仍将被关闭。 - Hasturkun

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接