如何从命令行启动 GUI Linux 程序,但与命令行分开?

如何从命令行启动 GUI Linux 程序,但与命令行分开?

我以前搜索过这个问题,但一直找不到答案。

在 Windows 中,如果我打开控制台窗口,键入winmine,然后按 Enter 键,Minesweeper 就会出现,与 cmd 程序完全分开。Minesweeper 实例与命令提示符没有任何关系,除非 Minesweeper 的父级设置为命令提示符的实例。然而,在 Linux 中情况有所不同。

在 Linux 中,如果我打开控制台窗口,键入emacs并按 Enter,Emacs 就会打开,但它似乎与命令行绑定在一起。具体来说,似乎在关闭 Emacs 实例之前,我无法再使用命令行。有没有办法在 Linux 中复制 Windows 的行为?

谢谢!

答案1

在 中bashdetach是内置的,使用方式如下:

emacs &
detach %+ # or % + the number in brackets printed after the above

在中zsh,您可以通过一个操作来后台运行并分离:

emacs &|

答案2

附加&到命令行:

emacs &

这会使 emacs 处于后台并使您能够继续使用您的终端。

请注意,这仍会使 emacs 作为终端的子进程,并且当您退出终端时,它也会退出 emacs。为避免这种情况,请输入:

(emacs &)

括号告诉终端将 emacs 进程与终端分离。

尽管如此,程序的 stdout 和 stderr 消息仍会显示在终端上。为防止这种情况,请使用:

(emacs &> /dev/null &)

答案3

使用nohup。像这样:nohup amarok &

希望这可以帮助。

答案4

util-linux 包含一个名为 setsid 的工具,它基本上完成 detach 的功能:

$ setsid someprogram

这将someprogram在新会话中运行。

相关内容