/usr/bin/gnome-terminal 中发生了什么?

cul*_*8er 4 gnome-terminal

我注意到没有名为“ gnome-terminal”的进程,尽管我使用了所谓的“ gnome-terminal”,它是通过单击桌面菜单栏上的图标来调用的。

$ ps -au | grep gnome
cul8er    8763  0.1  0.8 554960 33268 pts/22   Sl   05:16   0:00 /usr/lib/gnome-terminal/gnome-terminal-server --app-id com.canonical.Terminal.AnAuzDeiSeoqQhlGKbPNPeHhAROwBwtP
cul8er    8771  0.0  0.0  14852  1832 pts/22   S    05:16   0:00 gnome-pty-helper
cul8er    8821  0.0  0.0  14656  2232 pts/23   S+   05:27   0:00 grep --color=auto gnome
Run Code Online (Sandbox Code Playgroud)

所以我输入了gnome-terminal &. 输出如下:

$ gnome-terminal &
[2] 8865
$ 
[2]+  ??                  gnome-terminal
$ echo $LANG
ja_JP.UTF-8
Run Code Online (Sandbox Code Playgroud)

这个结果好像gnome-terminal是显示终端模拟器显示的时候进程就立即退出了。如果是真的,为什么我可以看到没有关联进程的新终端?

所以我检查了命令gnome-terminal

$ which gnome-terminal
/usr/bin/gnome-terminal
$ file /usr/bin/gnome-terminal
/usr/bin/gnome-terminal: Python script, ASCII text executable
Run Code Online (Sandbox Code Playgroud)

gnome-terminal是一个python脚本。

我看着它。我无法理解,因为我不知道python,但是我注意到/usr/lib/gnome-terminal/gnome-terminal-server --app-id,在 的输出中显示的ps与此问题有关。但我不知道“ subprocess”和“ Popen”是什么意思。

subprocess.Popen(['/usr/lib/gnome-terminal/gnome-terminal-server',
                           '--app-id',
                           name],
                          stdout=subprocess.DEVNULL,
                          stdin=subprocess.DEVNULL,
                         stderr=subprocess.DEVNULL)
Run Code Online (Sandbox Code Playgroud)

如果在gnome-terminal脚本运行时调用子进程,则当我打开 gnome-terminals 时应该运行多个进程。然而,/usr/lib/gnome-terminal/gnome-terminal-server --app-idps的输出中似乎总是只有一个进程。

脚本运行时发生了什么?

而代表所谓“ gnome-terminal”的过程又在哪里呢?

操作系统:Ubuntu 15.04

egm*_*ont 9

单个进程/usr/lib/gnome-terminal/gnome-terminal-server是处理所有 gnome 终端窗口的进程。

如果该命令尚未运行,则会gnome-terminal启动该命令gnome-terminal-server,或者连接到现有实例并要求它打开一个新窗口。

如果命令的每次调用gnome-terminal本身都会打开一个新窗口,因此每个终端窗口都由其自己的单独进程处理,则您将无法在它们之间拖放选项卡。这是我相信这个设计背后最重要的原因。可能还有其他原因,我不确定。