プロセス終了: コマンド kill
, killall
, pkill
1. プロセスの終了
今日はさらに一歩進んで、効率的にプロセスを終了させるコマンドを学びます。準備してね、"フリーズした"プログラムにイライラする日々はもうすぐ終わりだよ!
Linuxで実行中のアプリケーションやコマンドはすべてプロセスなんだ。でも、プログラムがフリーズしたり、CPUリソースを100%使い果たしたり、動作がおかしくなったらどうする?管理者(または開発者)の役割は介入して"反乱"プロセスを終了させることだね。Linuxにはこのためのツールがいっぱいあるよ: kill
, killall
, そして pkill
。怖そうな名前だけど、何も壊すために来たわけじゃないから安心して。むしろ、これらはきれいに整理整頓するためのエレガントな方法だよ。
2. コマンド kill
基本
kill
コマンドは、プロセスの識別子 (PID) を使ってプロセスを終了させるコマンドだよ。PIDはシステムが各プロセスに割り当てる一意の番号のこと。例えば、PIDが1234のプロセスを終了させたい場合、次のコマンドを使用するんだ:
kill 1234
Linuxは基本的にかなりフレンドリーなOSなので、kill
コマンドはプロセスに「終了しろ」って命令じゃなくて、「終了してね」ってリクエストを送るんだ。このリクエストは「シグナル」と呼ばれてて、デフォルトではSIGTERM
(15)というシグナルを送るよ。
シグナルって何?
Linuxではプロセスとやり取りするためにシグナルを使うよ。これは、いろいろな意図を込めたポストカードを送るような感じかな:
SIGTERM
(15): 「お願いだから終了してね」。プロセスに実行を終えるように丁寧に頼むシグナルだよ。SIGKILL
(9): 「もう我慢の限界だ!お前クビ!」プロセスを強制終了するためのシグナル。SIGHUP
(1): 「ちょっと設定をリロードしてくれよ」。止めずにプロセスを再起動するために使われる。
プロセスを強制終了する例を見てみよう:
kill -9 1234
SIGTERM
でプロセスが終了しない場合、もっと強いシグナルであるSIGKILL
を送ることができるよ。
どうやってプロセスのPIDを探すの?
kill
コマンドを使うには、プロセスのPIDを知る必要があるんだ。ここで便利なのが、ps
、top
、またはhtop
といったコマンドたち。例えば、ps aux
を実行すると、すべての実行中のプロセスが表示される:
ps aux | grep firefox
このコマンドを実行すると、Firefoxプロセスを見つけて、そのPIDを表示してくれるよ。
プロセスが終了すれば一安心。でも、「フリーズしてる」プロセスがいくつもある場合はどうする?そんな時にはkillall
とpkill
コマンドの出番だね。
3. コマンド killall
一括終了の便利さ
killall
コマンドを使うと、特定の名前を持つ全てのプロセスを終了させることができるよ。PIDを手動で探す必要がなくて、めっちゃ簡単に実行できる。例えば、全てのFirefoxインスタンスを閉じたい場合:
killall firefox
kill
コマンドと同様に、killall
もプロセスに信号を送信することができる。そして特定の信号を指定することも可能だよ:
killall -9 firefox
便利なアドバイス
killall
のようなコマンドを使うときは注意してね。間違って汎用的すぎるプロセスを指定してしまうと、例えばkillall python
と入力した場合、実行中のPythonアプリケーション全て、例えばサーバータスクや重要なスクリプトも終了させちゃうことになるから。
どんな信号がサポートされているの?
kill
、killall
、pkill
の全てのコマンドに対応する信号のリストを確認するには、このコマンドを使ってみてね:
kill -l
4. コマンドpkill
名前(またはその一部)でプロセスを検索
pkill
コマンドはkillall
と似ていますが、もっと柔軟です。特定のパターンに一致するプロセスを終了させることができます。例えば:
pkill fire
このコマンドは、名前に「fire」を含む全てのプロセスを終了します。プロセス名が長かったり、一部しか分からない時に便利です。
ユーザーのプロセスを終了する
特定のユーザーが所有するプロセスを終了することができます。例えば:
pkill -u username
このコマンドは、ユーザーusername
が所有する全てのプロセスを終了します。
kill
、killall
、pkill
の比較
コマンド | 特徴 |
---|---|
kill |
PIDでプロセスを終了する。ターゲットを絞った処理。 |
killall |
指定された名前の全てのプロセスを終了。大量のプロセスを一気に閉じる時に便利。 |
pkill |
名前またはパターンでプロセスを終了する。ユーザー名などの追加パラメータに対応。 |
5. 実践: プロセスを終了する
今まで学んだことを実際に試してみよう。まず、いくつか長時間実行のプロセスを開始するよ:
sleep 300 &
sleep 400 &
sleep 500 &
これらのコマンドで異なる待機時間のバックグラウンドプロセスが3つ作られるよ。これで、kill
, killall
, pkill
のコマンドを試す準備ができたね。
- コマンド
ps
を使って実行中のすべてのsleep
プロセスを確認:
ps aux | grep sleep
各プロセスのPIDが表示されるよ。
- 例えば、PIDが1234のプロセスを終了してみよう:
kill 1234
sleep
のプロセスを全部まとめて終了する:
killall sleep
- もう一度いくつか
sleep
プロセスを開始して、pkill
を使って終了:
pkill sl
6. よくあるミスと重要なポイント
他のユーザーのプロセスのように、権限がないプロセスを終了しようとすると、コマンドはエラーを返します。この場合、スーパーユーザーの特権(sudo)が必要です。例えば:
sudo kill 1234
もう一つ混乱の原因となるのは、あまりにも攻撃的なシグナル-9
の使用です。これはコンピュータの電源コードを抜くのに相当します: システムはリソースを解放したりデータを保存したりする時間がありません。SIGKILL
は本当に必要な場合のみに使用してください。
特にサーバーを管理している場合は、killall
やpkill
の使用には注意が必要です。「手探り」でプロセスを終了することは、重要なデータを失う可能性があります。
なぜプロセス終了コマンドを知ることが重要なのか?
これらのコマンドは、ハングアップしたアプリケーションの終了からサーバープロセスの管理まで、幅広い用途があります。採用面接では、kill
やpkill
の知識が、特にシステム管理やバックエンド作業に携わる際のあなたの能力の指標となることがあります。
これらの知識を活用して、制御不能なプロセスを自動的に終了させたり、使用中のポートを解放したりするスクリプトを作成してみてください。例えば、ポート8080を占有しているサーバーを起動する前に次のようにします:
pkill -f "port 8080"
これらのコマンドの柔軟性と強力さは、Linuxスペシャリストには欠かせないツールとなります。
GO TO FULL VERSION