我注意到,我启动的所有配对终端实例,无论是在配对终端内还是通过链接按钮,都具有相同的 PID。
例如,我得到了类似的东西
$ wmctrl -lp
<omitted lines that don't matter>
0x03c0001f 1 7411 <hostname> Terminal
0x03c06b9f 1 7411 <hostname> Terminal
0x03c07349 1 7411 <hostname> Terminal
0x03c073f4 1 7411 <hostname> Terminal
0x03c0749f 1 7411 <hostname> Terminal
0x03c0754c 1 7411 <hostname> Terminal
0x03c075f9 1 7411 <hostname> Terminal
0x03c076a6 1 7411 <hostname> Terminal
0x0340000b 1 <pid1> <hostname> xeyes
0x0460000b 1 <pid2> <hostname> xeyes
它清楚地表明有多个终端窗口,所有窗口都具有相同的 PID。如上所述,该进程是在终端内启动还是通过单击菜单栏链接启动并不重要。我是否在终端内的后台启动该进程也并不重要。
这里应用的规则是什么,或者“为什么会这样”?
我过去的理解是,我在 shell 中启动的每个命令都会获得一个唯一的 PID。
多个终端具有相同的 PID 是不是有点不切实际?
我不能再通过PID单独杀死它们了。
编辑:内核版本:3.16.0-4-amd64
答案1
Mate Terminal 的所有实例都具有相同的 PID,因为它们实际上是一个恰好显示多个窗口的单个进程。 Mate Terminal 在单个进程中运行,因为这就是应用程序的设计方式。当您运行该命令时mate-terminal
,它会联系现有进程并向其发送打开新窗口的指令。
从 Mate Terminal 1.8.1 开始,您可以运行mate-terminal --disable-factory
在新进程中打开新窗口。请注意,该选项已从 3.10 的 Gnome 版本中删除;我不知道 Mate 开发人员是否决定合并该更改。看运行真正的 gnome-terminal 多进程实例有关 Gnome-terminal 的类似问题。
答案2
尝试真正回答“为什么”的问题:
如果每个窗口都由不同的进程处理,您将无法将选项卡从一个窗口拖放到另一个窗口,或者拖放到桌面上以为此创建一个新窗口。