为什么Mate终端的多个实例具有相同的PID?

为什么Mate终端的多个实例具有相同的PID?

我注意到,我启动的所有配对终端实例,无论是在配对终端内还是通过链接按钮,都具有相同的 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

尝试真正回答“为什么”的问题:

如果每个窗口都由不同的进程处理,您将无法将选项卡从一个窗口拖放到另一个窗口,或者拖放到桌面上以为此创建一个新窗口。

相关内容