Linux でプロセスを強制終了したりプログラムを停止する方法

プロセスの動作がおかしいとき、そのプロセスを強制終了したいことがあります。 この投稿では、gedit をサンプルアプリケーションとして、コマンドラインやグラフィカルインターフェースからプロセスやアプリケーションを終了させるいくつかの方法を探ります。

コマンドライン/終了文字を使用する

Ctrl + C

コマンドラインから geditgedit &を使っていない場合) を起動すると、シェルセッションをブロックされたままにしておくために、プロンプトを解放しないことが1つの問題です。 このような場合、Ctrl+C (コントロールキーと ‘C’ の組み合わせ) が役に立ちます。 これでgeditが終了し、すべての作業が失われます(ファイルが保存されている場合を除く)。 Ctrl+CはgeditSIGINTシグナルを送ります。 これは停止シグナルで、デフォルトの動作はプロセスを終了させることである。 gedit を停止してメインループに戻るようシェルに指示し、プロンプトが戻ってくる。

$ gedit
^C

Ctrl + Z

これはサスペンド文字と呼ばれるものである。 プロセスに対してSIGTSTPシグナルを送ります。 これは停止信号でもあるが、デフォルトの動作は kill ではなく suspend である。

これで gedit を停止 (kill/terminate) してシェルプロンプトに戻る。

$ gedit
^Z
+ Stopped gedit
$

一旦プロセスが停止すると ( この場合 gedit )、gedit 内では書き込みも何もできないようにすることができる。 バックグラウンドでは、プロセスはジョブになります。 これは jobs コマンドで確認できる。

$ jobs
+ Stopped gedit

jobs では、単一のシェルセッションで複数のプロセスを制御することができる。 必要に応じてジョブを停止、再開、バックグラウンドまたはフォアグラウンドに移動することができます。

gedit をバックグラウンドで再開して、他のコマンドを実行するためにプロンプトを解放してみましょう。 bg コマンドの後にジョブ ID を指定します (上記の jobs の出力から に注目してください。 はジョブ ID です)。

$ bg 1
+ gedit &

これは gedit&, で起動するのと似ています:

 $ gedit &

Using kill

kill によりシグナルに対する細かい制御が可能になり、シグナル名かシグナル番号、そしてプロセスID、またはPIDを指定してプロセスに合図することができるようになりました。 gedit & を使って gedit をバックグラウンドで起動してみましょう。 jobsコマンドでgeditというジョブIDを得たと仮定して、SIGINTgeditに送ってみましょう:

 $ kill -s SIGINT %1

なお、ジョブIDは%を前に付けないとkillはそれをPIDとみなしてしまいます。

kill は信号を明確に指定せずに動作することが可能です。 その場合、デフォルトの動作はSIGTERMを送信し、プロセスを終了させる。 kill -l を実行してすべてのシグナル名をリストアップし、man kill コマンドで man ページを読む。

killall の使用

もしジョブ ID や PID を指定したくない場合、killall でプロセスを名前で指定することが可能である。 killall を使って gedit を終了させる最も簡単な方法は以下の通り:

 $ killall gedit

これで gedit という名前のプロセスをすべて終了させることができる。 kill と同様、デフォルトのシグナルは SIGTERM である。 -I:

$ gedit &
14852
$ killall -I GEDIT
+ Terminated gedit

killall が提供する様々なフラグ (ユーザ所有のプロセスを kill できる -u など) についてもっと知るには man ページ (man killall)

Using xkill

VLC などメディアプレイヤーがグレーアウトしたりハングアップする問題に遭遇したことはありませんか? これで、PID を見つけて、上記のコマンドのいずれかを使用してアプリケーションを強制終了するか、または xkill を使用できます。

xkill では、マウスを使用してウィンドウを強制終了することができます。 ターミナルで xkill を実行すると、マウスカーソルが x または小さな頭蓋骨のアイコンに変わるはずです。 閉じたいウィンドウの上で x をクリックします。 しかし、xkill の使用には注意が必要である-そのマニュアルページで説明されているように、危険な場合がある。 警告されました!

より詳しい情報は、各コマンドのマニュアルページを参照してください。 また、pkillpgrepのようなコマンドを調べることもできます。

コメントを残す

メールアドレスが公開されることはありません。