通常在图形环境中运行应用程序时,当我想要关闭它时,我会单击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。