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


9

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

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

man kill默认信号看来是15)SIGTERM,此信号是否会告诉应用程序我正在尝试关闭清理,关闭打开的文件,保存内容?

如果要从终端执行此操作,有更好的方法吗?


2
感谢您的询问!我学到了一些肯定会派上用场的东西。
Oliphaunt-恢复莫妮卡

Answers:


9

正常关闭应用程序的典型方法是使用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 -l列出所有窗口,并在第一列中以十六进制给出数字标识。=)
Terrance

谢谢,对大多数应用程序都适用,但是对于Deluge,可以选择一个选项Minimize to tray on closewmctrl -c它将关闭一个窗口,而不是应用程序本身,它将最小化运行到托盘。
迈克(Mike)

3

我认为值得添加的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。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.