本文へスキップ
totonoe.tech

Linuxを整える

中級

プロセスとシグナルを整える。

= kill と kill -9 の違いを、手を動かして目で見て理解する

プロセスが初めての方は、先に そもそもプロセスとは・どんな場面で使うか をどうぞ。

① ミニps体験 — kill と kill -9 は何が違う?

下のプロセス一覧から1つ選び、TERM(ふつうのkill)とKILL(kill -9)を送り比べてみましょう。TERMは『お願いして終了』、KILLは『問答無用で即死』。この違いが、実務でもっとも誤解されやすいポイントです。

🖥️ ps 風プロセス一覧 クリックで選択・送信ゼロ
PID PPID COMMAND 場所 STATUS 選択
101 1 nginx バックグラウンド running(実行中)
102 1 backup.sh バックグラウンド running(実行中)
103 1 vim フォアグラウンド running(実行中)
104 102 rsync バックグラウンド running(実行中)
🙂 待機中

上の一覧からプロセスを選び、TERMかKILLのボタンを押してください。

💡 実務の作法:まず kill(TERM)を送り、数秒待っても終了しなければ kill -9(KILL)という順番が定石です。いきなりKILLを使うのは、後片付けの機会を奪う「最終手段」であることを覚えておきましょう。

② ジョブ制御体験 — フォアグラウンド・バックグラウンド・停止

疑似ターミナルのボタンを順に押して、sleep 100 & → jobs → fg → Ctrl+Z → bg という一連の流れを体験しましょう。プロセスが『フォアグラウンド』『バックグラウンド』『停止中』の3状態を行き来する様子が図で見えます。

疑似ターミナル ボタン操作のみ・キー入力は不要(送信ゼロ)

$ このターミナルはボタン操作で進みます。下のボタンを順番に押してください。

フォア グラウンド バック グラウンド 停止中

Ctrl+Z:フォア→停止
bg:停止→バック(実行再開)
fg:バック/停止→フォア(実行再開)

現在の状態:(まだ何も実行していません)

💡 &(アンパサンド)を末尾に付けて実行すると、最初からバックグラウンドでジョブが始まります。Ctrl+Zはフォアグラウンドのジョブを一時停止してプロンプトを取り戻すためのショートカット、bgは停止中のジョブを実行再開しつつ裏に回す、fgは裏(または停止中)のジョブを表に戻す、という3つの操作を押さえれば、ターミナルを1つ占有せずに複数の作業を進められます。

③ シグナル早見表

LPIC/LinuCで問われやすい代表的シグナルの番号・意味・用途です。番号は暗記より『KILL=9は最終手段、TERM=15がまず送るべきお願い』という関係で覚えると忘れにくくなります。

シグナル 番号 意味
SIGHUP(ハングアップ) 1 本来は「制御端末が切断された」ことを知らせるシグナル。
SIGINT(割り込み) 2 キーボードからの割り込み要求。Ctrl+Cを押したときに送られるのと同じシグナル。
SIGQUIT(終了+コアダンプ) 3 Ctrl+\ で送られるシグナル。INTに似ているが、既定動作でコアダンプ(メモリの内容をファイルに書き出す)を伴う。
SIGTERM(終了のお願い) 15 プロセスに「終了してください」とお願いするシグナル。killコマンドの既定(番号を省略した場合)はこれ。
SIGKILL(強制終了) 9 OSのカーネルが直接プロセスを止める、無視も後片付けもできないシグナル。
SIGSTOP(一時停止) 19 プロセスの実行を強制的に一時停止させる。KILLと同じく無視できない。
SIGCONT(再開) 18 停止中のプロセスの実行を再開させる。

💡 SIGHUP(HUP・1番)の慣習:本来は「端末が切断された」ことを知らせるシグナルですが、長年の運用慣習として多くのデーモン(nginxやsshd等)が「設定ファイルを再読み込みせよ」という意味で解釈するようになりました。ただしkillコマンドで直接HUPを送るとプロセスが終了してしまうケースもあるため、実務ではまず専用のreload系コマンド(systemctl reload 等)を優先します。

④ プロセスの親子 — PPIDとfork

Linuxのプロセスは、既存のプロセスが自分の複製を作る fork() によって生まれます。生まれた側を『子プロセス』、生んだ側を『親プロセス』と呼び、子は自分のPPID(親プロセスID)に親のPIDを記録します。

fork() backup.sh PID 102 rsync PID 104

上の例では、backup.sh(PID 102)が処理の途中で rsync(PID 104)を fork() し、子プロセスの PPID には親のPID「102」が記録されます。ps -ef などでPPID列を見れば、どのプロセスがどこから生まれたかを辿れます。

くわしく:ゾンビプロセスとオーファン(孤児)プロセスとは

ゾンビプロセス:子プロセスが終了しても、その終了ステータスを親プロセスが wait() で回収するまでは、プロセステーブルに「終了済みの抜け殻」として残り続けます。この状態を ps で見ると Z と表示されます。親がきちんと wait() を呼べば消えますが、親の実装が悪いと大量に溜まり、プロセステーブルを圧迫することがあります。

オーファン(孤児)プロセス:逆に、子より先に親プロセスが終了してしまった場合、残された子プロセスは「養子」としてPID 1(initやsystemd)に引き取られ、PPIDが1に付け替わります。孤児になったプロセス自体は正常に動作を続けられ、最終的にinit系プロセスがwait()して回収します。

そもそもプロセスとは

いま動いているプログラム、その1つ1つ。

プログラムのファイルは、置いてあるだけでは何もしません。実行されて動き出したものがプロセスで、1つ1つに番号(PID)が付きます。ps や top を使うと、いま動いているプロセスの一覧と、それぞれがどれだけ CPU やメモリを使っているかが分かります。

プロセスには、シグナルという合図を送れます。「終わってください」とお願いする TERM、有無を言わさず止める KILL などがあります。kill という名前ですが、実際には「シグナルを送るコマンド」です。キーボードの Ctrl+C も、実行中のプロセスへの合図の一つです。

どこで・どんな場面で使うか

  • サーバーが重いとき

    top や ps で、CPU やメモリを使いすぎているプロセスを探します。

  • アプリが固まったとき

    止まらなくなったプロセスを探して、kill で終了させます。

  • 長い処理を裏で動かすとき

    & や bg で裏に回し、手元の端末は別の作業に使えるようにします。

  • サービスが動いているか確認するとき

    目的のプロセスが一覧にあるかを見れば、動いているかどうかの見当がつきます。

  • ポートが使用中で起動できないとき

    前に動かしたプロセスが残っていないかを調べて、片付けます。

知らないと何が困るか

  • いきなり強制終了してしまう。kill -9 は後片付けの機会を与えません。まず TERM で頼むのが基本で、順序を知らないとデータを壊すことがあります。
  • 止めてはいけないものを止める。どのプロセスが何をしているか分からないと、本番のサービスを止める事故につながります。
  • 裏で動かす方法を知らず、待ちぼうけになる。端末を占領されたまま、長い処理が終わるのをただ待つことになります。

上の体験で、kill と kill -9 の違いや、ジョブを裏に回す流れを試してみてください。

📘 LPIC/LinuCで頻出の範囲です。実際のシグナルはプロセスが独自のハンドラを登録して挙動を変えられる(例:SIGTERMを一時的に無視して後片付け専用の処理をする等)ため、本ページの状態遷移は「まずTERMとKILLの違い」「ジョブ制御の基本」を掴むための簡略モデルです。

このツールについて

『kill って書いてあるのに、なぜプロセスが死なないの?』『kill -9 との違いは?』——このページでは、架空のプロセスにシグナルを送って挙動の違いを目で確かめ、ジョブ制御(fg/bg/Ctrl+Z)を疑似ターミナルで操作し、代表的なシグナルとPPID・forkの親子関係まで、手を動かしながら理解できます。すべてこの端末の中だけで完結し、どこにも送信しません(送信ゼロ)。

架空プロセスにkill(TERM=お願い)とkill -9(KILL=即死)を送り比べて違いを体感。sleep 100 & → jobs → fg → Ctrl+Z → bgを疑似ターミナルで操作し、シグナル早見表とPPID・forkの親子関係も図解。

🔰 かんたんに言うと

動いているプログラム(プロセス)の止め方・待たせ方を、疑似ターミナルで安全に体験できます。

主な機能

  • ps風プロセス一覧からTERMとKILLを送り分け、後片付けの有無をアニメで比較
  • sleep 100 &→jobs→fg→Ctrl+Z→bgを疑似ターミナルのボタン操作で体験
  • フォアグラウンド/バックグラウンド/停止の3状態図で現在位置が動く
  • HUP/INT/QUIT/KILL/TERM/STOP/CONTのシグナル早見表(番号・意味・用途)
  • PPID・forkによる親子関係の1段図解、ゾンビ/オーファンもくわしくモードで解説
  • すべてブラウザ内・送信ゼロ

よくある質問

Q. プロセスとは何ですか?

A. プロセスとは、Linuxが実行中のプログラムを管理する単位です。プログラムを起動すると、OSはそれに一意の番号(PID/プロセスID)を割り当て、メモリやCPU時間などの資源を割り当てて動かします。1つのプログラムファイルから複数のプロセスが同時に起動されることもあり(例:ブラウザのタブごと)、`ps`コマンドで現在動いているプロセスの一覧(PID・状態・コマンド名など)を確認できます。

Q. kill と kill -9 は何が違いますか?

A. `kill`は既定でSIGTERM(15番)を送ります。これはプロセスに「終了してください」とお願いするシグナルで、プロセス側は受け取った後に保存処理や接続のクローズなど後片付けをしてから自分の意思で終了できます。一方`kill -9`はSIGKILL(9番)を送り、OSのカーネルが直接プロセスを停止させるため、プロセス自身は後片付けをする余地が一切ありません。挙動の違いは、本ページの「①ミニps体験」でTERMとKILLを送り比べると一目で分かります。

Q. なぜ、まずTERMを送るべきなのですか?

A. TERM(SIGTERM)はプロセスに後片付けの機会を与えるため、開いているファイルの保存、一時ファイルの削除、ネットワーク接続の正常なクローズなどを行ってから終了できます。対してKILL(SIGKILL)はこれらを一切スキップして即座に停止させるため、書きかけのファイルが壊れたり、一時ファイルの残骸が残ったりするリスクがあります。そのため実務では「まずkill(TERM)を送り、数秒待っても終了しなければkill -9(KILL)を使う」という順序が定石とされています。

Q. Ctrl+CとCtrl+Zの違いは何ですか?

A. Ctrl+CはフォアグラウンドのプロセスにSIGINT(割り込み)を送り、多くの場合プロセスはそのまま終了します。一方Ctrl+ZはSIGTSTP相当の停止シグナルを送り、プロセスを終了させずに一時停止させてプロンプトを取り戻します。停止しただけなので、後から`fg`(フォアグラウンドに戻す)や`bg`(バックグラウンドで再開する)でプロセスの実行を再開できます。本ページの「②ジョブ制御体験」で、Ctrl+Z→bg→fgの流れを実際に操作して確認できます。

Q. コマンドの末尾に付ける「&」とnohupは何が違いますか?

A. 末尾の`&`は、コマンドをバックグラウンドで実行し、プロンプトをすぐ返すための記法です(例:`sleep 100 &`)。ただしターミナルを閉じるとSIGHUPが送られ、多くの場合プロセスも一緒に終了してしまいます。`nohup`はこのSIGHUPを無視するようにしてからコマンドを起動する仕組みで、`nohup command &`のように組み合わせることで、ターミナルを閉じたりログアウトしたりしてもプロセスを動かし続けられます。長時間かかる作業をリモートサーバーで実行する際によく使われる組み合わせです。

Q. ゾンビプロセスとは何ですか?

A. 子プロセスが終了した後も、その終了ステータスを親プロセスが`wait()`で回収するまでの間、プロセステーブルに「終了済みの抜け殻」として残り続ける状態を指します。`ps`コマンドではステータスが`Z`と表示されます。親プロセスがきちんと`wait()`を呼べば自然に消えますが、親の実装に不備があると大量に溜まり、プロセステーブルの空きを圧迫することがあります。よく似た用語に「オーファン(孤児)プロセス」があり、こちらは逆に親が子より先に終了した場合に、子プロセスがPID 1(init/systemd)に引き取られる状態を指します。本ページの「④プロセスの親子」内の『くわしく』で詳しく解説しています。

Q. このページの操作はどこかに送信されますか?

A. いいえ。プロセス一覧・シグナル送信・ジョブ制御の操作はすべて、あなたのブラウザの中だけで完結する純粋なJavaScript(TypeScript)の計算です。サーバーへの通信は一切発生しません(送信ゼロ)。実在のプロセスを操作しているわけではなく、学習用の架空データを使った疑似体験です。

入力値はURLの「#」以降に入るためサーバーには送信されません。リンクを開くと同じ状態を復元します。

続けて整える

totonoe.tech を運営する株式会社Koinobori は、法人向けの研修サービス「NOBORIBA®」も運営しています。 ここで手を動かした内容を、講師から教わる形の研修です。このページの道具は無料のまま、登録もいりません。

運営サイト

私たちが運営するサイト