有时我想开始一个过程然后忘记它。如果我从命令行启动它,如下所示:
redshift
我无法关闭终端,否则它会终止该进程。我可以以可以关闭终端而不终止进程的方式运行命令吗?
答案1
以下 2 项之一应该有效:
$ nohup redshift &
或者
$ redshift &
$ disown
有关其工作原理的更多信息,请参阅以下内容:
nohup、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
分离,请与命令一起使用,如下所示:konsole
konsole
nohup
nohup kate &
关闭后konsole
,pstree
将如下所示:
init-+
|-kate---2*[{kate}]
并且kate
会生存下来。:)
另一种方法是使用screen
// tmux
,byobu
这将使 shell 保持运行,独立于终端。
答案4
我更喜欢:
(applicationName &)
例如:
linux@linux-desktop:~$ (chromium-browser &)
输入命令时请务必使用括号!