在接下来的几周内,我将挑战自己使用终端模拟器作为我的主要文件管理器。
我遇到了一个问题:如何从命令行打开 GUI 程序中的文件(例如 Inkscape .svg)?我知道我可以使用:
inkscape ./Design.svg &
将其移至后台,但它仍然是该gnome-terminal
进程的子进程(并随之消亡)。此外,任何调试警告等都将输出到该终端(打扰并烦扰我)。
像 Nautilus 这样的文件管理器如何以不再附加的方式分离启动的编辑器进程?
我怎样才能从我的终端做到这一点?
答案1
文章中讨论了实现这一目标的各种方法,以及每种方法的优点和缺点“bash
正确在后台运行命令”。主要基于那篇文章以及我自己阅读的POSIX 规范nohup
,完成您想要的事情的最便携的方法是:
nohup inkscape ./Design.svg >/dev/null 2>&1 &
这实际上并不否认该进程——您的终端仍然是父进程。然而,
- 如果你的终端死掉了,inkscape 进程也不会死掉,并且
- 您将不会在终端上看到任何输出,
- 该文件
nohup.out
不会在您的主目录中创建,就像您删除了到/dev/null
. (参见nohup
文档来解释这个文件。)
如果您正在使用bash
并且不关心 POSIX 可移植性而只关心简单性,那么最简单的方法是,正如 @thrig 在评论中指出的那样:
inkscape ./Design.svg & disown
disown
尽管您在本用例中不需要它们,但您可以使用多个选项。输入help disown
以查看其他可用选项。