我发布了一个针对类似主题的较早主题的答案,其中包含来自各种来源的答案。以下是适合该主题的答案的副本。
以下作品:
$ (gui_app &> /dev/null &)
这是Nathan Fellman的答案以及重定向。
“&> / dev / null”将stdout和stderr都重定向到空设备。最后一个与号使该过程在后台运行。该命令的括号将使您的“ gui_app”在子shell中运行。
这样做会将“ gui_app”进程与您从中执行此命令的控制台分离。因此,即使您关闭正在运行其父终端模拟器的窗口,“ gui_app”也不会关闭。我运行了该程序,然后使用“ pstree”命令查看了进程树,发现以这种方式启动的应用程序将成为“ init”的子进程。
例如,
$ gui_app &> /dev/null &
将在后台运行该应用程序,但它将成为控制台进程的子进程,并在您关闭终端时终止。(尽管通过使用exit命令或Ctrl-D通过bash退出终端,可以通过将后台进程移交给init使bash清理。)
“ nohup”按照NawaMan的建议工作,但是默认情况下会将输出和错误重定向到文件。正如JeffG回答的那样,启动后台进程后,“ disown”命令(如果在shell中可用)可以从终端分离进程:
$ gui_app &
$ disown
(顺便说一句,所有这一切都适用于bash。我敢肯定其他shell有其他方法/语法来执行此操作。)
一些参考:
取消进程(UNIX Power Tools)
如果是对GUI应用程序的简单调用-没有复杂的选项等-似乎使用“ gmrun”或dmenu(警告:声音过大)之类的启动器也是一个不错的选择。将其绑定到组合键。我还没有使用启动器,但是已经尝试了这两个。
注意:CarlF在其他线程报告的注释中,通过“ gui_app&”方法启动的GUI应用程序从父终端退出时不会关闭。我认为我们正在以不同方式关闭终端。我正在关闭运行终端仿真器的窗口。我认为他可能已经通过外壳退出了终端仿真器(退出命令或Ctrl-D)。我对此进行了测试,发现通过bash退出并不会像GUI所说的那样终止GUI作为终端的后台进程而启动。当有机会清理时,bash似乎将后台进程移交给了init。实际上,这必须是将在子外壳程序中启动的后台进程移交给init的机制。