从终端启动应用程序

Ant*_*eev 6 bash terminal

可能的重复:
如何在不终止其中运行的命令的情况下关闭终端?

如何从终端启动 GUI 应用程序(例如 gedit)并一步将其从那里分离?

muf*_*fel 9

运营商能够在后台运行应用程序。用

nohup gedit
Run Code Online (Sandbox Code Playgroud)

或者

nohup gedit &
Run Code Online (Sandbox Code Playgroud)

(后者让您在启动 gedit 后使用终端,只需按回车将其发送到后台)。Nohup完全从终端和会话分派应用程序。


Cal*_*leb 8

有两个步骤。一种通常称为“背景”,另一种称为“否认”。

  • 您可以通过&在命令后附加一个与号来启动后台作业。这会将作业发送到后台并允许您的 shell 继续运行。您后台运行的命令仍然作为 shell 的子进程运行。您可以在 shell 作业列表中看到它 bu running jobs。您可以运行fg(或者fb %N如果您有多个后台作业)将其带到前台并将其发送到诸如CtrlC.
  • 您通过运行disown %NN 是工作编号来否认工作。如果你只有一份背景工作,那就是disown %1. 这会将后台作业踢出“巢外”,使其不再是 shell 的子代。然后您可以关闭 shell,被拒绝的程序将继续运行。

注意:在 ZSH 中,您可以通过运行command &!. 该&!一步到位的背景和不承认。

  • @glenn:不完全是。自己试试吧。Nohup 是一个信号拦截器,如果父节点关闭,它会阻止将终止信号传递给子节点,但它使父/子/工作情况保持不变。Disown 将它们分离,以便不再存在信号试图传递的关系。 (3认同)
  • @Anton:`man nohup` 说_运行一个不受挂起影响的命令_。基本上“HUP”不是挂断信号。当您在 shell 中(甚至在后台)运行作业时,如果 shell 关闭,该进程将收到“挂断”信号。大多数程序在收到此消息时会选择关闭,这意味着您从 shell 启动的任何内容都会随之消失。Nohup 阻止了这一点。它以自己的孩子身份启动您的命令,并且当它接收到 nohup 信号时故意不会将其传递给孩子,因此即使其父母去世,它也会继续运行。Disown 是一个 shell 内置函数,可以消除这种关系。 (2认同)

Kim*_*Kim 6

如果你已经启动了它,你可以按 ctrl-z,回车bg,然后disown。尽管如此,您仍然会从应用程序获得输出到终端。