順番に読み進めながら学べます

プロセスの確認と停止 — ps / kill

psで実行中プロセスを一覧し、$ で自分のPIDを確認、& で裏に回したプロセスをkillで停止するまでを、ブラウザ端末で操作しながら学べます。

実行中のプロセスを見る — ps

プロセスとは、実行中のプログラム 1 つ 1 つを指します。

psは今この瞬間に動いているプロセスの一覧を表示するコマンドです。

各プロセスには PID(プロセス番号)という固有の番号が割り当てられ、後で停止するときの目印になります。

一覧が多いときはps | grep sleepのようにパイプでgrepに渡すと、名前でプロセスを絞り込めます。

プロセスとは — プログラムが動いている実体
プログラムshプログラムsleepプログラムvish のプロセスsleep のプロセスvi のプロセスPID 101PID 142PID 188
プログラムを実行すると「プロセス」になり、1 つずつ固有のPIDが割り当てられます。psはこの実行中プロセスを一覧します。
コマンド意味
ps実行中プロセスを PID 付きで一覧
ps | grep name名前でプロセスを絞り込む
echo $$今のシェル自身の PID を表示
cmd &コマンドをバックグラウンドで実行

シェル自身の PID は特別な変数$$で取り出せます。

$$はシェルが自分の PID を入れて持つ特別な変数です。

echo $$を実行すると、今コマンドを打っているこのシェルの番号が表示され、psの一覧の中に同じ番号が見つかります。

ps と $$ で現在のプロセスを読む
ps実行中プロセスを PID 付きで一覧echo $$今のシェルの PID を表示
psで動いているプロセスの PID 一覧、echo $$で今のシェルの PID を確認します。
ps          # 実行中プロセスの一覧(PID 付き)
echo $$     # このシェル自身の PID
ps -ef      # より詳しい一覧(環境により表示形式は異なる)

psを実行して、今動いているプロセスの一覧を表示してください。

echo $$で、今コマンドを打っているこのシェル自身の PID(番号)を表示してください。

③ もう一度psを実行し、一覧の中に手順②で出た番号があることを目で確認してください。(正しく実行できれば解説が表示されます)

Linux console
0 / 2 実行済み
Loading Linux Terminal...

バックグラウンド実行と停止 — & と kill

コマンドの末尾に&を付けると、そのコマンドをバックグラウンドで実行し、終了を待たずにすぐ次の操作へ進めます。

sleep 30 &は 30 秒間何もせず待つだけのプロセスを裏で動かすので、停止操作の練習に向いています。

バックグラウンドのプロセスを止めるにはkillに PID を渡します。

&で起動した直後にシェルが PID を表示し、psの一覧でも確認できます。

PID をkillに渡すと、そのプロセスへ終了の合図が送られます。

通常のkill PIDで止まらないプロセスにはkill -9 PIDで強制終了の合図を送ります。

コマンド送る合図用途
kill PIDSIGTERM(終了要求)通常の停止。プロセスに後始末させる
kill -9 PIDSIGKILL(強制終了)止まらないプロセスを強制的に落とす
バックグラウンド実行から停止まで
sleep 30 &裏で実行・PID が表示されるps一覧で sleep の PID を確認kill PIDその PID のプロセスを終了
&で裏に回し、psで PID を確認し、killでそのプロセスを終了します。

kill には正しい PID を

killは渡された PID のプロセスへ終了の合図を送ります。

番号を取り違えると別のプロセスを止めてしまうため、psの一覧で対象の PID を確認してから実行してください。

この環境での kill について

このブラウザ環境では、killに PID を渡しても実環境のようにはプロセスが止まらず、No such processと表示されることがあります。

本講座ではkill PID / kill -9 PIDというコマンドの形を学びます。

実際のサーバーでは、psで PID を確認してkillで停止する、この流れがそのまま使えます。

sleep 60 &     # 60 秒待つプロセスを裏で実行
ps             # 一覧から sleep の PID を確認
kill 123       # 確認した PID(例: 123)を渡して終了

sleep 30 &を実行し、30 秒待つだけのプロセスをバックグラウンドで起動してください。

ps | grep sleepを実行し、一覧からsleepの行だけを絞り込んで PID(番号)を確認してください。

③ 手順②で確認した番号をkillに渡して、そのsleepプロセスを終了してください。

Linux console
0 / 3 実行済み
Loading Linux Terminal...
QUIZ

理解度チェック

まずは1問ずつ答えてみましょう。

Q1psを実行すると何が表示されますか?

Q2echo $$で表示されるのは何ですか?

Q3コマンドの末尾に&を付けると何が起こりますか?