如何运行一个在终端关闭后仍然存在的命令?

如何运行一个在终端关闭后仍然存在的命令?

有时我想开始一个过程然后忘记它。如果我从命令行启动它,如下所示:

redshift

我无法关闭终端,否则它会终止该进程。我可以以可以关闭终端而不终止进程的方式运行命令吗?

答案1

以下 2 项之一应该有效:

$ nohup redshift &

或者

$ redshift &
$ disown

有关其工作原理的更多信息,请参阅以下内容:

答案2

如果你的程序是已经运行您可以使用 暂停它Ctrl-Z,使用 并将其拉入后台bg,然后disown使用它,如下所示:

$ sleep 1000
^Z
[1]+  Stopped                 sleep 1000
$ bg
$ disown
$ exit

答案3

@Steven D 已经发布了很好的答案,但我认为这可能会更澄清一点。

进程在终端终止时被杀死的原因是您启动的进程是终端的子进程。一旦关闭终端,这也会杀死这些子进程。您可以使用 查看进程树pstree,例如kate &在 Konsole 中运行时:

init-+
     ├─konsole─┬─bash─┬─kate───2*[{kate}]
     │         │      └─pstree
     │         └─2*[{konsole}]

要使进程在终止时kate分离,请与命令一起使用,如下所示:konsolekonsolenohup

nohup kate &

关闭后konsolepstree将如下所示:

init-+
     |-kate---2*[{kate}]

并且kate会生存下来。:)

另一种方法是使用screen// tmuxbyobu这将使 shell 保持运行,独立于终端。

答案4

我更喜欢:

(applicationName &)

例如: linux@linux-desktop:~$ (chromium-browser &)

输入命令时请务必使用括号!

相关内容