プロセス
試験範囲的にはプロセス自体については詳細に問われることはないので、簡単にいきます。
Linuxシステムでコマンドなどを実行する際には、カーネルがディスクから実行ファイルを読みだしてメモリに格納し、メモリの内容に従ってCPUがプログラムを実行します。
ここで、メモリ上で実行状態にあるプログラムのことを「プロセス」と呼びます。
試験的には特にプロセスごとに一意に振られるプロセスIDにより管理されるというのが重要です。
プロセスは実行されている状態で、個別にメモリ領域を確保するためコマンドごとの結果がまざるようなことは起こりません。
psコマンド
現在実行されているプロセスを表示するにはpsコマンドを用います。
実践的にはオプションを用いてこそなところもあり、試験的にもオプションは重要なのでオプションはよく覚えておいた方がよいと思われます。
・psコマンドをオプションなしで実行する
オプションなしで実行するとユーザ自身が実行しているプロセスの最低限の情報のみが表示されます。
[wantan@localhost links]$ ps PID TTY TIME CMD 1937 pts/1 00:00:00 bash 1978 pts/1 00:00:00 top 1979 pts/1 00:00:00 ps
オプション
psコマンドのオプションには「-」(ハイフン)をつけるものとつけないものが存在するので注意です。基本的には「-」なしのオプションを使用することが推奨されているらしい。おそらく試験では「-」のありなしで正誤が問われることはほとんどないとは思いますが。。
オプション | 内容 |
---|---|
a | 他のユーザのプロセスを表示 |
f | プロセスの親子関係をツリー状で表示 |
u | ユーザ名も表示 |
x | 制御端末にないデーモンプロセスも表示 |
-e | すべてのプロセスを表示 |
-l | 詳細情報を表示 |
-f | 完全なフォーマットで表示 |
-p | 指定したPIDの情報のみ表示 |
-C | 指定した名前のプロセスのみ表示 |
■システムで実行されるすべてのプロセスを表示
主に2種の方法が知られています。
・「-e」オプション
[wantan@localhost ~]$ ps -e PID TTY TIME CMD 1 ? 00:00:01 systemd 2 ? 00:00:00 kthreadd 4 ? 00:00:00 kworker/0:0H 5 ? 00:00:00 kworker/u256:0 6 ? 00:00:00 ksoftirqd/0 <・・省略・・>
・「ax」オプション
[wantan@localhost ~]$ ps ax PID TTY STAT TIME COMMAND 1 ? Ss 0:01 /usr/lib/systemd/systemd --switched-root --system -- 2 ? S 0:00 [kthreadd] 4 ? S< 0:00 [kworker/0:0H] 5 ? S 0:00 [kworker/u256:0] 6 ? S 0:00 [ksoftirqd/0] <・・省略・・>
比較してみると微妙にフォーマットが違うんですね。試験的にはここのフォーマットの違いが問われることはないと思います。
■プロセスの親子関係を表示する
実際に使用するときは特定のプロセスを表示されるように他のオプションと組み合わせて使用することが多いと思われます。
[wantan@localhost ~]$ ps f PID TTY STAT TIME COMMAND 1364 pts/0 Ss 0:00 -bash 1413 pts/0 R+ 0:00 \_ ps f
■完全なフォーマットで表示
「-f」オプションを使用します。
[wantan@localhost ~]$ ps -f UID PID PPID C STIME TTY TIME CMD wantan 1364 1363 0 23:24 pts/0 00:00:00 -bash wantan 1420 1364 0 23:35 pts/0 00:00:00 ps -f
■プロセスの優先順位を表示
後述する優先順位を表すnice値を表示するには「-l」オプションまたは「l」オプションを使用します。
ハイフンの有無によって微妙な違いがありますが試験的にはそこまで気にしなくてもよいと思います。
[wantan@localhost ~]$ ps -l F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD 0 S 1000 1364 1363 0 80 0 - 28922 do_wai pts/0 00:00:00 bash 0 R 1000 1422 1364 0 80 0 - 38337 - pts/0 00:00:00 ps
[wantan@localhost ~]$ ps l F UID PID PPID PRI NI VSZ RSS WCHAN STAT TTY TIME COMMAND 0 1000 1364 1363 20 0 115688 2128 do_wai Ss pts/0 0:00 -bash 0 1000 1421 1364 20 0 153348 1488 - R+ pts/0 0:00 ps l
システム状況の把握コマンド
freeコマンド
freeコマンドはメモリの利用状況、空き状況を確認するコマンドです。
[wantan@localhost ~]$ free total used free shared buff/cache available Mem: 995684 177008 696344 7784 122332 682232 Swap: 2097148 0 2097148
オプション
オプション | 内容 |
---|---|
-k | KB単位で表示 |
-m | MB単位で表示 |
-g | GB単位で表示 |
-h | 分かりやすい単位で表示 |
-s | 指定秒感覚で繰り返し表示 |
試験的に重要と思われるオプションは他のコマンドでも使われる表示単位と、繰り返し実施ぐらいでしょう。
表示単位は実際には「-h」を使うことが多い気がします。
「-h」は人間に分かりやすいということでhumanなんたらの「h」からきてるとか。
■5秒単位で繰り返し表示
[wantan@localhost ~]$ free -h -s 5 total used free shared buff/cache available Mem: 972M 172M 680M 7.6M 119M 666M Swap: 2.0G 0B 2.0G total used free shared buff/cache available Mem: 972M 172M 680M 7.6M 119M 666M Swap: 2.0G 0B 2.0G
uptimeコマンド
uptimeコマンドはシステムの稼働時間やロードアベレージ(load average)を表示するコマンドです。
特にロードアベレージを確認する際には使用することも多いと思われます。
[wantan@localhost ~]$ uptime 00:05:28 up 1:00, 1 user, load average: 0.00, 0.01, 0.05
load averageはCPUが他のプロセスを処理中で実行待ちのプロセスの平均数を表しており、左から1分間平均、5分間平均、15分間平均となっています。
平均値がコア数が上回ると恒常的な待ちが発生しているなど言われますが試験的には数値の分析などは問われないと思われます。
topコマンド
topコマンドはプロセスの継続的な監視にも使用されますが、システム稼働状況の総合的な分析にも使用できます。
top - 00:11:55 up 1:07, 1 user, load average: 0.00, 0.01, 0.05 Tasks: 104 total, 2 running, 102 sleeping, 0 stopped, 0 zombie %Cpu(s): 0.0 us, 1.1 sy, 0.0 ni, 98.9 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st KiB Mem : 995684 total, 695652 free, 177500 used, 122532 buff/cache KiB Swap: 2097148 total, 2097148 free, 0 used. 681640 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 734 root 20 0 359104 29788 7240 S 0.0 3.0 0:00.61 firewalld 1074 root 20 0 574300 17436 6136 S 0.0 1.8 0:00.49 tuned 1078 root 20 0 214456 14556 3180 S 0.0 1.5 0:00.23 rsyslogd 695 polkitd 20 0 613020 10928 4900 S 0.0 1.1 0:00.06 polkitd 754 root 20 0 702524 9316 7124 S 0.0 0.9 0:00.24 NetworkManager 1 root 20 0 128044 6676 4152 S 0.0 0.7 0:01.21 systemd 505 root 20 0 49120 6092 2876 S 0.0 0.6 0:00.52 systemd-udevd 1359 root 20 0 158928 5680 4340 S 0.0 0.6 0:00.14 sshd
出力例からもわかる通り、uptimeコマンド、freeコマンド、psコマンドの結果を合わせたものとみなすこともできます。
topコマンドの実行中に「c」でコマンドの表示や「shift+m」でメモリの使用量順にソートなどもできますが、試験的にはまずは他のコマンドとの対応と表示される内容をしっかりと把握しておくことが重要かと思います。
プロセスの終了コマンド
システム管理を行っているとプロセスを強制終了したいシーンがあると思います。
そのようなときにはプロセス終了コマンドを実行する必要があります。
ここでは試験的にも出題可能性がある「kill」、「pkill」、「killall」の3つのコマンドを確認していきます。
killコマンド
プロセスキル系のコマンドの中でも基本的なコマンドになります。
停止させるプロセスによってはシステムが正常に動作しなくなる場合もありますので、実践的には操作に慣れていない場合にはよくプロセスを確認してから停止させる必要があります。
killコマンドではプロセスIDを指定する必要があるため、前述のtopコマンドやpsコマンドで調べて実行することになります。
[wantan@localhost ~]$ kill 1726
killコマンドはプロセスに対してシグナルを送信することによって停止などの処理を実行します。
以下のような書式で指定します。
kill -[シグナル名またはシグナルID] [PID]
kill -s [シグナル名またはシグナルID] [PID]
kill -SIG[シグナル名] [PID]
試験的には特にシグナルの種類について覚えておく必要があります。
単にkillコマンドは使ったことがありましたが、シグナル指定で実行したことはあまりないのでなかなか覚えるがキツいところです。
主要なシグナル
シグナル名 | シグナルID | 説明 |
---|---|---|
HUP | 1 | ハングアップ(=端末切断による終了) |
INT | 2 | キーボードからの割り込み(=Ctrl+C) |
KILL | 9 | クリーンアップせず終了(強制終了) |
TERM | 15 | クリーンアップして終了(デフォルト) |
CONT | 18 | 停止プロセスを再開 |
STOP | 19 | 一時停止 |
TSTP | 20 | 端末入力の一時停止(=Ctrl+Z) |
例えば「PID:1726」を「強制終了」させる場合には以下のような書式になります。
kill -9 1726
kill -KILL 1726
kill -s 9 1726
kill -SIGKILL 1726
killallコマンド
killallコマンドもプロセスを終了させるコマンドですが、こちらPIDではなくプロセス名を指定して実行します。
「all」が含まれている通り、該当するプロセス名のプロセス全てが終了されることになるので、特に実際に使用する場合には注意が必要です。
コマンドの書式はほぼkillコマンドと同じです。
killall -[シグナル名またはシグナルID] [プロセス名]
killall -s [シグナル名またはシグナルID] [プロセス名]
killall -SIG [シグナル名] [プロセス名]
シグナル名やシグナルIDの扱いについてはkillコマンドと同様です。
pkillコマンド
pkillコマンドはkillallコマンドと同じくプロセス名で指定してプロセスを終了させます。
書式もkillallと同じです。
pkill -[シグナル名またはシグナルID] [プロセス名]
pkill -s [シグナル名またはシグナルID] [プロセス名]
pkill -SIG [シグナル名] [プロセス名]
pkillで注意すべき点はオプションで実行ユーザを指定できる点です。
オプション
オプション | 内容 |
---|---|
-u | プロセスの実行ユーザ名を指定 |
-g | プロセスの実行グループ名を指定 |
■特定ユーザのtopコマンドを終了させる
[wantan@localhost ~]$ pkill -u wantan top
プロセス実行優先度
優先度(nice値)
プロセスには実行優先度が割り当てられており、優先度が高いプロセスはCPU時間の割り当てで優先されるので結果として単位時間当たりにこなせる処理が多くなるという仕組みになっています。
優先度はnice値として管理されています。
プロセスのnice値はtopコマンドや「ps -l」コマンドにより確認することができます。
nice値は-20~19の範囲が当てられ、小さいほど優先順位が高くなります。
nice値を指定せずに普通にコマンドなどを実行した場合、プロセスはデフォルトの「0」(ゼロ)で生成されます。
niceコマンド
プロセスの優先順位を設定して実行するにはniceコマンドを使用します。
nice値を指定しない場合はデフォルトで「10」が設定され、また現在の状態よりも優先順位を高くする(低い値を設定する)のは管理者ユーザのみが実行することができます。
・niceコマンドの書式
nice -n [nice値] コマンド
nice -[nice値] コマンド
・実行例
[wantan@localhost ~]$ nice -5 top
[root@localhost wantan]# nice -n -10 top
reniceコマンド
実行中のコマンドに対してnice値を変更する場合にはreniceコマンドを使用します。
reniceコマンドは稼働しているプロセスに対して実行するため、PIDや実行ユーザをオプションで指定する必要があります。
・reniceコマンドの書式
renice -n [nice値] -p [PID]
renice [nice値] [PID]
個人的に注意すべきはreniceコマンドでは「-n」オプションを省略するときに数値の前にハイフンをつけないところです。
[wantan@localhost ~]$ renice 13 -p 1446
オプション
「-p」オプションはつけないでもPIDを指定することができます。オプション | 内容 |
---|---|
-n | ナイス値の指定 |
-p | PIDで指定 |
-u | ユーザ名で指定 |
・前回(第十八回)
www.wantanblog.com
・次回(第二十回)
www.wantanblog.com