ターミナル経由でGUIアプリケーションをソフトキルする方法は?


22

アプリケーションウィンドウにグラフィカルにアクセスせずに、「今すぐ終了してください」という方法でGUIアプリケーションを閉じる方法はありますか?

たとえば、Gnome / Xディスプレイが黒にクラッシュした場合、tty2に切り替えて、Firefoxなどのアプリケーションを閉じて、設定などを保存できるようにします。

回答:


19

通常、SIGHUPを使用して、アプリケーションを「友好的」に閉じることができます(グラフィカルインターフェイスの有無にかかわらず)。

kill -HUP <application_pid>

編集:その他の情報を追加

SIGHUPの処理方法はアプリケーションに依存するため、Daveが述べたように、この信号がマスクまたは処理されることがあります。ただし、すべての対話型アプリケーションは、SIGHUPで正常に終了します。

一方、私は通常このスキーマに従うことを認めなければなりません:

kill -HUP <application_pid>
# check if application is still running
kill -INT <application_pid>
# check if application is still running
kill -KILL <application_pid>

明らかに最後のコマンドはそれほど「フレンドリー」ではありません。


3
アプリケーションのPIDがわからない場合pkillは、代わりに実行可能ファイルの名前を指定するために使用できます。例:pkill -HUP firefox-bin
カレブ

@Dave:興味深いことに、同様の、しかし元に戻された順序を示唆する関連するものを見つけました:TERM-> INT-> HUP(古い時代に注意してください)。KILLは私に優しいとは思えないので、HUP-> INT-> TERMを念頭に置いておこう。ありがとうございます。
jfk

@Caleb、同じ名前のプロセスが複数ある場合は注意しpkillてください:それらをすべて強制終了します。たとえば、これを数回実行して、バックグラウンドプロセスを作成しますsed "s/Woo/woo/" < /dev/urandom >> /dev/null &。それからpkill -HUP sed。開始したsedのすべてのインスタンスと、有用な作業を行っている他のインスタンスをすべて終了します。
ahcox

また、@ Calebは予期pkillしないアプリも強制終了します。たとえば、chromium実行中のプログラムを強制終了したい場合はrompkill喜んで撃shoot chromiumします。killall正確な名前のみに一致する、より適切な使用(ただし、文字通りすべてのプロセスを強制終了するSolarisではそうではありません)。
ルスラン

@Ruslanまたはを使用pkill -xして、部分一致ではなく完全一致を取得します。私は個人的には部分一致を利用してタイピングを節約していますが、ツールが何をするのかを知っている必要があります。はい、デフォルトでは部分文字列に一致します。もう1つの便利なオプションは-f、単にの代わりに完全なコマンドラインと照合すること$0です。
カレブ

5

あなたが試してみたいことがあります:

kill -TERM <pid>

または

kill -TERM `pidof <application_name>`

少なくとも一部のシステムでは、システムがシャットダウンする場合、すべてのプロセスはKILL(9)シグナルを送信する前にTERM(15)シグナルを送信します。HUPはしばしばアプリケーションに設定をリロードさせるだけですが、プロセスごとに異なる場合があります。


2

構成を終了して保存するようにアプリケーションに指示する一般的な方法はありません。dcop kfoo MainApplication-Interface quit一部のKDE 3アプリケーションなど、特定のフレームワークを使用してアプリケーションに通知する方法があります。アプリケーションが確認を求めるダイアログボックスを表示する場合があることに注意してください。

Xディスプレイが使用できなくなった場合は、Xサーバーを強制終了します。Ctrl+ Alt+を押しBackSpaceます。うまくいかない場合は、でXサーバープロセスを強制終了しsudo pkill -x Xorgます。Xサーバーが停止すると、すべてのXアプリケーションに通知され、それらは正常に終了しようとします(すべてを保存する保証はありませんが、最善の方法です)。


アプリに通知するのか、単に殺すのかわからなかった。また、Fedoraではキーの組み合わせがデフォルトで有効になっていないため.....コマンドラインでそれを強制終了する方法がわかりました。
jfk

1

@andcozの答えと同じように、アプリケーションのPIDがわからない場合(心から知らないことを前提としています)、これを試してください:

kill -HUP `pidof [application_name]`

2
その一歩踏み出して、試してみてくださいpkill -HUP [application_name]:)
カレブ

pkillとpgrepを学んだばかり:D
jfk

1

あなたが考慮したいと思うかもしれない他の二つのコマンドがあるwmctrl -cxdotool windowkill。パッチにwindowkill興味があるかもしれませんが、あなたが望んでいるものかどうかはわかりませんwindowdelete

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