如何杀死特定的 X 窗口

use*_*456 11 command-line bash batch wmctrl

给定由 生成的 ID wmctrl -l,我希望能够终止链接到窗口 ID 的进程。

你会建议怎么做?

Flo*_*sch 10

如果您使用wmctrl -lpPID,则在第三列中。

对于给定的窗口 ID,您可以使用

kill $(wmctrl -lp | awk '/^WID/ {print $3}')
Run Code Online (Sandbox Code Playgroud)

(用您的窗口 ID 替换 WID)


Nyk*_*kin 10

除了按照 Florian Diesch 和 Serg 的其他答案中所述列出 PID 之外,您还可以使用-icoption 直接关闭窗口:

$ wmctrl -ic 0x02e00085
Run Code Online (Sandbox Code Playgroud)

  • 如果进程卡住,它可能不会注意到您关闭了窗口。该窗口将消失,但该进程仍将存在并且可能会消耗 CPU 和 RAM。 (3认同)

Ser*_*nyy 8

wmctrl实际上还有另一个-p用于列出 PID 的标志。

bash-4.3$ wmctrl -lp
0x0380000a  0 4410   eagle Desktop
0x04800006  0 4275   eagle XdndCollectionWindowImp
0x04800009  0 4275   eagle unity-launcher
0x0480000c  0 4275   eagle unity-panel
0x0480000f  0 4275   eagle unity-dash
0x04800010  0 4275   eagle Hud
Run Code Online (Sandbox Code Playgroud)

一旦你知道了这一点,提取那个窗口的 PID 并将它传递给一个微不足道的练习 kill

wmctrl -lp | awk '/Window Title/{print $3}' | xargs kill
Run Code Online (Sandbox Code Playgroud)


Ran*_*832 7

您也可以使用xkill -id [id]. 该xkill工具从其他答案的工作方式不同-而不是关闭窗口或直接杀伤的过程中,它指示X服务器断开连接创建窗口客户端。这通常会导致进程终止,即使对于远程进程也是如此。

每种方法的优缺点:

  • wmctrl -c“优雅地”关闭窗口 - 就像您自己单击了窗口管理器的关闭按钮一样。如果应用程序不希望窗口被关闭或被冻结,这可能不会终止进程,甚至可能不会关闭窗口。

  • 使用wmctrl -lpwith的 pidkill可以保证终止进程,但如果进程可能在不同的机器上运行,则可能需要额外的工作或根本不工作。

  • xkill可能不会终止进程,如果它被设计为能够从 X 服务器崩溃或网络连接丢失中恢复,但大多数应用程序在这些情况下只会崩溃。无论如何,窗户都会消失。远程进程和本地进程的处理方式相同。