流れ2の7語目 / 10

プロセス

Linux

メモリがほとんど残っていないと分かりました。top で見ると、夜のうちに終わるはずの「集計処理」が、朝になっても終わらず、メモリを大量に使ったまま動き続けています。このように、終わるはずの処理が先へ進まなくなった状態を「固まる」ということがあります

「その固まってるプロセス止めて。まずはふつうの kill でね」
「プロセス」って、何のことだろう…?

プロセスは、動いている最中のプログラムのことです。

1つずつ番号(PID)がついていて、番号を指定して止めることができます。

このページで分かること読む 約5分・問題 3問
  • プロセスは、動いている最中のプログラムのこと
  • プロセスには1つずつ番号(PID)がつく
  • kill コマンドでプロセスに「止まって」という合図(シグナル)を送る
  • kill -9(KILL)は、後片付けなしで強制的に止める最後の手段

身近な例えで理解する

レシピは、書いてあるだけでは料理になりません。実際に火にかけて作っている最中の鍋が、プロセスにあたります。同じカレーのレシピを見ながら、2つの鍋で同時にカレーを作ることもできます。片方の鍋が焦げはじめたら、その鍋の火だけを止めれば、もう片方の鍋やほかの料理はそのまま続けられます。

  • レシピ保存されているプログラム
  • 火にかけて作っている最中の鍋プロセス
  • 同じレシピから2つの鍋同じプログラムから2つのプロセス
  • 「右奥のコンロの鍋」のように、どの鍋かをはっきり指すPIDで、どのプロセスかを指定する
  • 焦げた鍋だけ火を止めるそのプロセスだけ止める(kill)

キッチンでは、いくつもの鍋が同時に火にかかっています。サーバーでも、たくさんのプロセスが同時に動いています。困っている1つだけを止めれば、キッチン(サーバー)全体を止めずにすみます。ただし、指す鍋を間違えると、焦げていない鍋の火を止めてしまいます。PIDも、止める前に必ず確かめます。

ちょっと確認

Q14択

プロセスの説明として正しいものは?

例えを外して、実際のしくみ

ここからは実際のしくみ
プログラムとプロセス

ストレージに保存されているのがプログラム、それを動かしてメモリの上で動いている最中のものがプロセスです。同じプログラムから、プロセスがいくつもできることもあります

一覧を見る

ps aux で動いているプロセスの一覧を、PID・CPUやメモリの使用率と一緒に見られます。top では、多く使っている順に並べて見られます

実行例(練習用に用意した Ubuntu 24.04 で、user2 というユーザーで実際に動かした結果。自分のプロセスだけを表示する ps u を使っています。sleep 300 は300秒待つだけのコマンドで、最後に & をつけると裏で動かせます):
user2@vm:~$ sleep 300 &
[1] 1841
user2@vm:~$ ps u
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
user2     1826  0.0  0.0   5028  4252 pts/0    S    17:50   0:00 -bash
user2     1841  0.0  0.0   3136  2004 pts/0    S    17:50   0:00 sleep 300
user2     1842  0.0  0.0   8348  4472 pts/0    R+   17:50   0:00 ps u
user2@vm:~$ kill $!
user2@vm:~$ ps u
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
user2     1826  0.0  0.0   5028  4252 pts/0    S    17:50   0:00 -bash
user2     1843  0.0  0.0   8348  4480 pts/0    R+   17:50   0:00 ps u
[1]+  Terminated              sleep 300

sleep のPIDは1841です。$! は「直前に裏で動かしたプロセスのPID」を表します。kill で TERM を送ると、次の一覧から sleep が消えています。

止める

kill PID で、そのプロセスに「終わって」という合図(シグナル)を送ります。指定しなければ TERM という合図で、プロセスは後片付けをしてから終われます。ほかの利用者のプロセスを止めるには、sudo が要ります(→09)

kill -9 は最後の手段

TERM で止まらないときは kill -9 PID(KILL)で強制的に止めます。これはプロセス側で断れませんが、後片付けができないので、書きかけのデータが中途半端に残ることがあります。PIDを打ち間違えると別のプロセスが止まるので、実行前に必ず確かめます

このページのまとめ

プロセス
動いている最中のプログラム
PID
プロセスにつく番号
kill(TERM)
「後片付けして終わって」の合図を送る。ふつうはこちら
kill -9(KILL)
後片付けなしで強制的に止める。最後の手段

先輩のひとことの意味

先輩「その固まってるプロセス止めて。まずはふつうの kill でね」

「メモリを使いっぱなしで終わらない集計処理のプロセスを、PIDを確かめて止めて。いきなり強制終了せず、まずは後片付けできる TERM の合図で」という意味です。新人がPIDを先輩と一緒に確かめて kill すると、集計処理は止まり、メモリの空きが戻って、システムも軽くなりました。ただ、先輩はまだ気がかりがあるようです。

練習問題で確かめる

Q2先輩のひとこと
先輩「いきなり kill -9 はやめてね」

なぜ?

Q3並べ替え

固まったプロセスを止める手順を、正しい順に並べてください。

下のカードを、正しい順にタップしてください。

参考資料

ご意見・「これで例えて!」を募集しています

ご意見・ご感想・質問・間違いのご指摘など、何でもお気軽にお寄せください。「この言葉も例えで説明してほしい」「こんな例えなら分かりやすい」という声をもとに、新しいページや例えを作ります。

  • 説明してほしいITの言葉
  • 例えてほしい場面(部活・アルバイト・家事など)
  • 分かりにくかったところ・間違いのご指摘

意見箱は準備中です。

解説・例え・練習問題はすべてオリジナルです。参考にしているのは公式ドキュメントのみです。ご意見・ご感想・間違いのご指摘など、何でもお寄せください。確認してすぐに直します。

LinuCはLPI-Japanの登録商標です。当サイトはLPI-Japanおよび他の企業・団体とは関係ありません。

運営:core