はじめに
こんにちは!ITスクールRareTECHにてCS(Customer Support)を担当している池村です。今回の記事はLinuxのプロセスについて解説します。プロセスは簡単にいうと、今動いているプログラムのことです。
ps
コマンド
プロセスはLinuxでも、Macでも、Windowsでも同じ概念で動いています。
今パソコン上で動いている全てのプログラムは、全てプロセスとしてOSが管理しています。
まずはLinuxにおけるプロセスの確認方法を見ていきましょう。
ps
このコマンドをubuntuで叩いてみた場合、以下のようなプロセスが表示されます。
ps
コマンドをオプションをつけずに実行すると、画像のように少ない情報しか表示されません。
PID
このPIDはプロセスIDのことで、プロセスごとに一意の識別子として付与されます。
このPIDを指定して、プロセスを終了させたりすることも可能です。
TTY
これはターミナル端末の情報ですね。このプロセスが動いているシェルはどれか?を表示してくれています。
当たり前ではありますが、Linuxでは複数のシェルが開かれることが多いです。なので、どのプロセスがどの端末で動いているのかを表示するのは当然と言えます。
TIME
こちらはCPUの使用時間です。ps
コマンドも、bash
コマンドもCPUが瞬時に実行しているので時間なんてかかっていないようですね。
CMD
CMDはCOMMANDを省略したもので、コマンド名そのものです。
grep
コマンドなどを併用して、特定のプロセスのみを表示することも可能です。
ps | grep bash
よく使うオプションについて
psコマンドは、よく使うオプションもありますので、こちらでご紹介します。
よく併用して使われるのがa
、u
、x
の三つです。
ps aux
これを実行すると、同じLinuxのOSで、違う端末のプロセスも表示されます。
今回はtmuxを使いつつ、プロセスの確認をしていきましょう。
tmux
tmuxを利用したことがない方はこちらの記事で学習してみてください。
tmuxを開いたら、画面を分割して、ペインを二つにしておきましょう。
まずは片方のシェルで、ps
コマンドと、ps aux
コマンドを順番に実行します。
tmuxももちろんプロセスに追加されていますね。
aux
をつけた方は、別のシェルのプロセスも表示されているのですが、それ以外にも様々な情報が表示されています。一つずつ見ていきましょう。
USER
このコマンドを実行したユーザー情報です。今回は全てrootユーザーが実行していますが、このLinuxにアクセスしているユーザーが複数いる場合は、そのユーザー名も表示されます。
&CPU
CPU使用率をパーセンテージ(%)で表示してくれます。数字の高いプロセスがCPUを多く使っている、ということになります。
%MEM
プロセスが使用している メモリの割合をパーセンテージ(%)で表示しているものです。
VSZ
仮想メモリの使用量のことで、そのプロセスがメモリ上にどれだけ領域を確保したかであり、実際に使用している量ではありません。
RSS
こちらは実際に使われたメモリの使用量になります。
例えば、プログラムが1GBのメモリ領域を確保しても、実際に100MBしか使わなければ、VSZは1GBですが、RSS(メモリ使用量)は100MBになるということです。
VSZとRSSは無理に理解しようとしなくてOKです。初学者はこういったところをスルーして、必要になったら調べるようにしていきましょう。
STAT
これはステータスの略になっています。今現在のプロセスの状態を教えてくれています。
プロセスの種類について
プロセスにも種類があるので、まずはここで少し紹介をいたします。
Linuxのプロセスは、実行状態や動作の仕組みによって分類がされていて、以下のようになります。
プロセスの種類 | 説明 |
---|---|
フォアグラウンドプロセス | ユーザーが直接実行し、操作を待つ(例: ls , vim ) |
バックグラウンドプロセス |
& をつけて実行し、シェルから離れる(例: sleep 100 & ) |
デーモンプロセス | OSのバックグラウンドで動作(例: systemd , sshd ) |
ゾンビプロセス | 仕事が終わったのに、まだ残っているプロセス |
孤立プロセス | 親(実行したプロセス)がいなくなり、OSに預けられたプロセス |
STATに表示されるコードの種類
STATにはSs
や、R+
などの表記(コード)があります。
その表記についても以下にまとめます。
コード | 意味 | 説明 |
---|---|---|
R |
実行中(Running) | CPU で実行中のプロセス |
S |
スリープ(Sleep) | 一時的に待機状態(I/O待ちなど) |
D |
割り込み不可スリープ(Uninterruptible Sleep) | ディスク I/O などでブロック中 |
T |
停止(Stopped) |
Ctrl+Z で停止されたプロセス |
Z |
ゾンビ(Zombie) | 終了済みだが親プロセスが回収していないプロセス |
追加コード | 意味 |
---|---|
+ |
フォアグラウンドプロセス |
< |
高優先度 |
N |
低優先度 |
s |
セッションリーダー(bash など) |
l |
マルチスレッド(L ではなく小文字 l ) |
上記の表を全て覚えるのは難しいですが、R
が実行中、S
が待機、T
が停止などについては理解しておきましょう。
START
こちらはプロセスがいつ開始されたかを表示してくれています。
- 時刻 (11:30) → 今日起動
- 日付 (Jan08) → 1週間以上前に起動
- YYYY-MM-DD → 1年以上前に起動
auxのオプションの意味
オプションについても表にまとめておきます。
コマンド | 説明 |
---|---|
ps |
現在のシェル(TTY)で動いているプロセスのみ表示 |
ps a |
他のユーザーのプロセスも表示(ただし、ログインセッション内) |
ps u |
ユーザー名とプロセス情報を表示 |
ps x |
バックグラウンドプロセスも表示 |
ps aux |
システム全体のすべてのプロセスを表示(他のユーザー含む) |
ps
コマンドは、基本的にaux
をつけることが多いですので、脳死でつけるものくらいに覚えておいてください。
プロセスを終了させるコマンド
プロセスを強制的に終了させるコマンドがあります。
それがkill
コマンドです。このkill
コマンドを使って、先ほど開いていたtmuxのペインを強制的に終了させようと思います。
基本的なコマンドの使い方は以下になります。
kill <PID>
強制終了したい時
kill -9 <PID>
プロセス名で指定
pkill <プロセス名>
tmuxのペインを強制終了して�る
まずはプロセス一覧を確認
root@2be0b453da33:/# ps aux │
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND │
root 1 0.0 0.0 4300 720 pts/0 Ss 11:03 0:00 /bin/bash │
root 219 0.0 0.0 8952 1268 pts/0 S+ 11:09 0:00 tmux │
root 221 0.0 0.0 9624 3584 ? Ss 11:09 0:01 tmux │
root 230 0.0 0.0 4300 1792 pts/2 Ss 11:11 0:00 -bash │
root 255 0.0 0.0 4300 3420 pts/1 Ss+ 12:25 0:00 -bash │
root 261 50.0 0.0 7632 3676 pts/2 R+ 12:25 0:00 ps aux
これをみる限り、ps aux
を実行したのが今のシェルなので、pts/2
が今いるペイン、pts/1
がもう一つのペインのようです。
kill -9 255
tmuxは普通にkill
しても閉じられないので、今回は-9
のオプションを使用します。
ペインが消えました。
ps aux
コマンドを叩いて、本当になくなっているのかも確かめてください。
kill
コマンドは使い方によっては少々危険ですが、明らかにCPUやメモリを消費しているプロセスを終了させるのに便利なコマンドです。
おわりに
今回はLinuxにおけるプロセスについてご紹介しました。
MacでもWindowsでも、プロセスを終了させることで、余計に動いているものを消すことができますので、消しても大丈夫なプロセスを消して試してみてください。