動かなくなったプログラムを止める
スマホのアプリが固まったとき、アプリを強制終了して直したことはありませんか。サーバーでも同じことが起きて、動いているプログラムを探して止める作業があります。
動いているプログラムをプロセスと言います。探し方と止め方を知っておくと、障害のときに落ち着いて動けます。
このレッスンのゴール
メモ
動いているプロセスを探して止め、サービスの状態を確かめることができる。
キーワード
| ことば | いみ | れい |
|---|---|---|
| プロセス | 今、動いているプログラム | |
| PID | プロセスごとにつく番号 | |
| サービス | 裏で動き続けて、仕事を受け持つプログラム | Web サーバー |
| シグナル | プロセスに送る、止まれなどの合図 | |
| systemctl | サービスを調べて、動かしたり止めたりする命令 |
学生が入力するセルは、このプレビューでは空白です。
始める前に
メモ
上のバーの Start the lab を押し、マシンが動き出すまで待ってください。このラボでは、4つのプログラムが裏で動いています。
動いているプロセスの探し方
ps は、動いているプロセスの一覧を出します。pgrep は、名前でプロセスを探し、PID を表示します。
どのプロセスにも PID がつきます。1番のプロセスは、マシンが最初に動かすプログラムで、このラボでは systemd です。
1番のプロセスを見る
ps -p 1 -o comm=ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
名前でプロセスを探す
pgrep -l lab-workerここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
例: プロセス一覧の読み方
| PID | ユーザー | CPU(%) | 名前 |
|---|---|---|---|
| 1 | root | 0.0 | systemd |
| 812 | student | 0.1 | lab-worker |
| 815 | student | 35.2 | lab-stubborn |
学生が入力するセルは、このプレビューでは空白です。
プロセスを止めるには
kill は、PID を指定してプロセスに止まれという合図を送ります。ふつうの合図は、プロセスが片づけをして終わる、やさしい合図です。
これを無視するプロセスには、kill -9 を使います。強制的に止めるので、最後の手段にしてください。
例: 止める手順
# 1. 名前から PID を調べる
pgrep -l lab-stubborn
# 2. やさしい合図を送る
kill 815
# 3. まだ動いていたら、強制的に止める
kill -9 815よくある間違い
注意
固まったら、いきなり kill -9 を使えばよいと考える人がよくいます。kill -9 は片づけをさせないので、書きかけのデータが壊れることがあります。まず kill を試し、効かないときだけ使ってください。
サービスの状態を調べるには
サービスは、裏で動き続けるプログラムです。systemctl status は状態を調べ、start と stop は動かして止めます。
enable は、マシンを起動したときに自動で動くようにします。is-active は、動いているかを、一言で答えます。
Web サーバーは動いているか
systemctl is-active lab-webここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
ログを書くサービスは動いているか
systemctl is-active lab-loggerここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
例: systemctl の使い方
| 命令 | すること |
|---|---|
| sudo systemctl start lab-web | サービスを動かす |
| sudo systemctl stop lab-web | サービスを止める |
| sudo systemctl restart lab-web | 止めて、もう一度動かす |
| sudo systemctl enable lab-web | 起動時に自動で動かす |
学生が入力するセルは、このプレビューでは空白です。
さらに挑戦: 親と子
プロセスは、別のプロセスが起動します。起動した側を親、された側を子と言い、ps -ef の PPID の列が親の PID です。
親が止まると、子はどうなるでしょうか。調べて、自分の言葉で説明してみましょう。