spl*_*cer 4 linux window-manager
我会搜索这个,但我不知道如何为搜索引擎表达它。
基本上,当我从终端窗口启动 gui 程序时,在退出程序之前无法进一步使用该终端。我刚开始使用 dwm,我不想在启动了几个图形程序后到处都是无用的终端.. 有什么办法可以解决这个问题吗?
Car*_*rlF 10
每个人都说使用“&”是对的。如果你忘记了,输入 ^Z (ctrl+Z) 来挂起程序,然后输入“bg”来告诉 shell 在后台运行它。这使 shell 完全交互,就像您使用“&”启动程序一样。
小智 5
我意识到这是一个旧线程,但我记得找到了比此处列出的更复杂的解决方案。
$ (gui_app &> /dev/null &)
Run Code Online (Sandbox Code Playgroud)
"&> /dev/null" 将 stdout 和 stderr 都重定向到空设备。最后一个&符号使进程在后台运行。命令周围的括号将使您的“gui_app”在子shell中运行。
这样做会将“gui_app”进程与您执行此命令的控制台分离。因此,即使您关闭正在运行的窗口父终端模拟器,“gui_app”也不会关闭。我运行了这个然后用“pstree”命令查看进程树,发现以这种方式启动的应用程序将成为“init”的子进程。
例如,
$ gui_app &> /dev/null &
Run Code Online (Sandbox Code Playgroud)
将在后台运行应用程序,但它将成为控制台进程的子进程,并在您关闭终端时终止。(尽管使用 exit 命令或 Ctrl-D 通过 bash 退出终端将通过将后台进程交给 init 来让 bash 清理。)
或者,您可以使用“nohup”,但默认情况下会将输出和错误重定向到文件。在启动后台进程后,“disown”命令(如果在 shell 中可用)可以从终端分离进程:
$ gui_app &
$ disown
Run Code Online (Sandbox Code Playgroud)
(顺便说一句,所有这些都适用于 bash。我确定其他 shell 有其他方法/语法来执行此操作。)
类似的超级用户问答 - 也许我记得其中的一些答案:...从命令行启动 GUI linux 程序,但与命令行分开?
一些参考: 拒绝进程(UNIX Power Tools)
如果它是对 GUI 应用程序的简单调用 - 没有复杂的选项等 - 似乎使用“gmrun”或dmenu(警告:大声音频)之类的启动器也是一个不错的选择。将其绑定到一个组合键。我还没有使用启动器,但已经尝试过这两个。
注意:评论中的 CarlF 报告说,通过“gui_app &”方法启动的 GUI 应用程序在从父终端退出时不会关闭。我认为我们以不同的方式关闭了航站楼。我正在关闭运行终端模拟器的窗口。我想他可能已经通过 shell(退出命令或 Ctrl-D)退出了终端模拟器。我对此进行了测试,发现通过 bash 退出并不会像 CarlF 所说的那样停止作为终端后台进程启动的 GUI。当 bash 有机会清理时,它似乎将后台进程交给 init 。事实上,这一定是在子shell中启动的后台进程被移交给init的机制。