研究室内の仲間とUbuntuでいろいろなことをしていると、「プロセスの終了の仕方が分からない」人が多いので、ここいらでまとめときます。
あと、「そのサーバーで回っている実験やプログラムが見たい」とか「過負荷どうなってるの?」とかも聞かれることが多いので、ここらへんの人にも役に立つはずです。
想定環境
- Windows Subsystem for Linux
- または Linux や Linux Server
問題の起こし方
さて、問題を具体的に見ていくために、上記の環境を持っている人は nyancat というタイマーを用意しましょう。
端末に以下のように打ち込みましょう。
$ sudo apt install nyancat
Linuxの「端末」というのは、WSLにおけるUbuntuや、Hyper, Cmderといったアプリです。
これで nyancat がインストールされました。
では起動してみましょう。
$ nyancat
すると、コンソール画面に以下のように表示されるはずです。
これは、とても楽しいタイマーなのですが、どうやってこの画面を抜けるか、で問題が起こります。
「Ctrl + C」で抜けましょう。
しかし、もし「Ctrl + Z」で抜けたとします。
すると、「$ exit 」として端末を閉じようとしたとき、すぐに閉じられなくなります。
この状況を簡単に言うと、「いまこの端末で一時停止しているプロセスを殺さないと終了できない」という状況です。
「Ctrl + Z」はプロセスの一時停止なので、nyancat はバックグラウンドに回ってしまうのです。
もう一度、nyancat コマンドを実行しても、新しい nyancat のプロセスが生成されるだけで、昔の nyancat は消えてくれません。
このへんの挙動の違いを詳しくまとめている記事はこちら。
さて、こうなってしまったプロセスや、バックグラウンドに回ってしまったプロセスを殺すために、まずは実行中のプロセスを見ましょう。
top コマンドの見方
top コマンドはプロセスによるシステムの過負荷などの情報がリアルタイムで見れます。
$ top
以下が実行画面です。
黒い画面べた張りで申し訳ないです。
「q」を押すと止めれます。
一番上の load average ってのが、誤解を恐れずにいうと、CPUに処理されるのを待っている仕事の数で、仕事がなくて暇なほど小さくなります。
左から、1分、5分、15分の平均の値です。
ここの値に関しては、コア数とかにもよるけど、旧世代のノーパソで負荷かけたときは 10 超えてて、ファンがウィンウィンまわってました。
あとはプロセスのID、実行時間やCPU使用率などが見れるので、サーバを触る人は重宝してるコマンドだと思います。
ps コマンド
ps コマンドは実行中のプロセスを表示するコマンドです。
私はこのコマンドをバックグラウンドで走っているプログラムを見るときによく使います。
計算機実験などで使用するサーバーでは、他の人の負荷にならないようにまずはそのサーバーで何が起こっているのかを知る必要がありますから。
$ ps ax
- a : 表示にほかの端末も含める。
- x : 現在実行しているプロセスの表示
これで実行中のプロセスの最低限の情報は取れます。
このオプションなら、プロセスのIDやそのプロセスの状態が見れます。
nyancat のプロセスについてだけ表示させたいなら
$ ps ax | grep "nyancat"
とすれば、出せます。
STATを見れば、プロセスの状態が分かります。
ゾンビになってるプロセスだけ表示させたいときとかにも使えます。
私はよく「$ ps aux」として使います。
- u:ユーザー名と開始時刻を表示する
kill コマンドの使い方
kill コマンドは、プロセスを強制終了するためのコマンドです。
さて、top か ps コマンドで問題の nyancat のプロセスIDが取れたと思います。
取得したプロセスIDをもとに、以下のように実行します。
$ kill "プロセスID"
今回の場合では、「$ kill 182」とすれば、無事 nyancat を終了させることができます。
お疲れさまでした。