プロセスの動作がおかしいとき、そのプロセスを強制終了したいことがあります。 この投稿では、gedit をサンプルアプリケーションとして、コマンドラインやグラフィカルインターフェースからプロセスやアプリケーションを終了させるいくつかの方法を探ります。
コマンドライン/終了文字を使用する
Ctrl + C
コマンドラインから gedit
(gedit &
を使っていない場合) を起動すると、シェルセッションをブロックされたままにしておくために、プロンプトを解放しないことが1つの問題です。 このような場合、Ctrl+C (コントロールキーと ‘C’ の組み合わせ) が役に立ちます。 これでgedit
が終了し、すべての作業が失われます(ファイルが保存されている場合を除く)。 Ctrl+Cはgedit
にSIGINT
シグナルを送ります。 これは停止シグナルで、デフォルトの動作はプロセスを終了させることである。 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を得たと仮定して、SIGINT
をgedit
に送ってみましょう:
$ 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
の使用には注意が必要である-そのマニュアルページで説明されているように、危険な場合がある。 警告されました!
より詳しい情報は、各コマンドのマニュアルページを参照してください。 また、pkill
やpgrep
のようなコマンドを調べることもできます。