正しく終了するのと同じ方法でターミナルからアプリケーションを閉じる方法


9

通常、グラフィカル環境でアプリケーションを実行しているときに、アプリケーションを閉じるにXは、ウィンドウの左上隅をクリックするか、に移動しFile > Closeます。

コマンドラインを使用して、ターミナルからssh経由でリモートでこれらのプログラムをリモートで閉じたいと思います。今はkillコマンドを使用していますが、アプリケーションをそれ自体から適切に終了するのと同じように機能するのではないでしょうか。

man killデフォルトのシグナルから15)SIGTERMのように見えますが、このシグナルは、クリーンアップ、開いているファイルのクローズ、保存などのために閉じようとしているアプリケーションに通知しますか?

端末から実行したい場合、もっと良い方法はありますか?


2
質問してくれてありがとう!いつか役立つと思うことを学びました。
Oliphaunt-モニカ2016年

回答:


9

アプリケーションを正常に閉じる一般的な方法は、を使用することですkill -TERM 1234。ここ1234で、はウィンドウのPIDです。ただし、問題は、グラフィカルアプリケーションが、TERM信号をリッスンするのではなく、Xサーバー自体からの特定の信号をリッスンするように設計されていることです。

つまり、適切な信号を送信したいことを伝えるために、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すべてのウィンドウがリストされ、最初の列に数値IDが16進数で表示されます。=)
テランス

ありがとう、ほとんどのアプリケーションで問題なく動作しますが、DelugeにはオプションがMinimize to tray on closeありwmctrl -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

この例ではスピードクランチを閉じます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.