如何从终端关闭应用程序,与正确退出应用程序的方式相同

如何从终端关闭应用程序,与正确退出应用程序的方式相同

通常在图形环境中运行应用程序时,当我想要关闭它时,我会单击X窗口的左上角或转到File > Close

我有时想使用命令行从终端通过 ssh 远程关闭这些程序,现在我使用kill命令,但我想知道它是否与从其自身正确退出应用程序相同。

man kill默认信号来看是 15)SIGTERM,这个信号是否会告诉我试图关闭的应用程序进行清理、关闭打开的文件、保存内容?

如果我想从终端执行此操作,有没有更好的方法?

答案1

正常关闭应用程序的典型方法是使用kill -TERM 1234,其中1234是窗口的 PID。然而,问题在于图形应用程序被设计为监听来自 X 服务器本身的特定信号,而不是监听信号TERM

这意味着您需要在您和 X 服务器之间建立某种代理,以便传达您想要发送适当信号的信息。您当然可以编写 C 程序,但是已经存在可以执行wmctrl此操作的程序(毫不奇怪,是用 C 编写的)。

使用wmctrl很简单:

wmctrl -c :SELECT: # close window that will be selected with pointer
wmctrl -c :ACTIVE: # close currently active window
wmctrl -ic <numeric id> # close window with specific id in hex

默认情况下它没有安装,因此请使用sudo apt-get install wmctrl

它有很多用途,wmctrl远不止关闭窗口,因此请参阅我的更多回答和 Jacob Vlijm 的回答,了解使用它的脚本示例

答案2

我认为值得添加的是wmctrl -xl输出如下结果:

0x03000001 -1 google-chrome.google-chrome  dcentore-pc Rybak - Google Play Music - Google Chrome
0x04600006  0 speedcrunch.Speedcrunch  dcentore-pc SpeedCrunch

x请求窗口的位置班级在输出中。这通常是每次关闭同一程序的最简单方法。然后,我们可以在关闭时提供窗口类:

wmctrl -xc speedcrunch.Speedcrunch

此示例将关闭 speedcrunch。

相关内容