SEワンタンの独学備忘録

IT関連の独学した内容や資格試験に対する取り組みの備忘録

【LPIC101】Linuxにおけるプロセス管理系コマンド LPICで学ぶLinux⑲

プロセス

試験範囲的にはプロセス自体については詳細に問われることはないので、簡単にいきます。

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