文件管理器如何拆分打开的程序?

文件管理器如何拆分打开的程序?

在接下来的几周内,我将挑战自己使用终端模拟器作为我的主要文件管理器。

我遇到了一个问题:如何从命令行打开 GUI 程序中的文件(例如 Inkscape .svg)?我知道我可以使用:

inkscape ./Design.svg &

将其移至后台,但它仍然是该gnome-terminal进程的子进程(并随之消亡)。此外,任何调试警告等都将输出到该终端(打扰并烦扰我)。

像 Nautilus 这样的文件管理器如何以不再附加的方式分离启动的编辑器进程?

我怎样才能从我的终端做到这一点?

答案1

文章中讨论了实现这一目标的各种方法,以及每种方法的优点和缺点“bash正确在后台运行命令”。主要基于那篇文章以及我自己阅读的POSIX 规范nohup,完成您想要的事情的最便携的方法是:

nohup inkscape ./Design.svg >/dev/null 2>&1 &

这实际上并不否认该进程——您的终端仍然是父进程。然而,

  1. 如果你的终端死掉了,inkscape 进程也不会死掉,并且
  2. 您将不会在终端上看到任何输出,
  3. 该文件nohup.out不会在您的主目录中创建,就像您删除了到/dev/null. (参见nohup文档来解释这个文件。)

如果您正在使用bash并且不关心 POSIX 可移植性而只关心简单性,那么最简单的方法是,正如 @thrig 在评论中指出的那样:

inkscape ./Design.svg & disown

disown尽管您在本用例中不需要它们,但您可以使用多个选项。输入help disown以查看其他可用选项。

相关内容