[ ] [ ] [ ] [ トップページ ] [ 目次 ] [ Linuxの概要 ] [ 基本的な操作 ] [ 日本語の扱い ] [ テキスト編集 ] [ システム管理 ] [ シェルスクリプト ] [ インストール作業の基本 ] [ データベース ] [ 各種リファレンス ]  
[ ログインとパスワード ] [ X WindowとGUI ] [ コマンドの基本 ] [ オンラインマニュアルの使い方 ] [ コマンドパイプラインとリディレクション ] [ ディレクトリの扱い ] [ ファイルの扱い ] [ ファイルの属性 ] [ プロセスの基本 ] [ ジョブ制御 ] [ コマンドヒストリ ] [ エイリアス ] [ 環境設定 ] [ その他 ]

プロセスの基本

プロセスとは

OSから見たときに,実行中の一つの一つのプログラムをプロセスという。
個々のプロセスにはIDが割り当てられ,それをPIDと呼ぶ。

動いているプロセスを調べる

psコマンド

ps [options]

実行中のプロセスを一覧表示する。オプションによって,表示するプロセスの条件を指定したり,表示形式を切り替える。

実行例

[toshim@gw2000 ~]$ ps
 PID 端末 状態 時間 コマンド
  672  p0 S    0:00 -bash
  689  p0 R    0:00 ps
[toshim@gw2000 ~]$ ps ax
 PID 端末 状態 時間 コマンド
    1  ?  S    0:03 init [3]
    2  ?  SW   0:00 (kflushd)
    3  ?  SW<  0:00 (kswapd)
    4  ?  SW   0:00 (md_thread)
    5  ?  SW   0:00 (md_thread)
   36  ?  S    0:00 /sbin/kerneld
  166  ?  S    0:00 /sbin/dhcpcd -c /etc/sysconfig/network-scripts/ifdhcpc-done
  237  ?  S    0:00 syslogd
(以下省略)

[toshim@gw2000 ~]$ ps l
 フラグ  UID   PID  PPID PRI  NI  サイズ 常駐 WCHAN     状態 端末 時間 コマンド
   100   500   672   671  18   0   1268   836 wait4       S   p0  0:00 -bash
100000   500   946   672  19   0   1536   600             R   p0  0:00 ps l
[toshim@gw2000 ~]$ ps axf
 PID 端末 状態 時間 コマンド
    1  ?  S    0:03 init [3]
(途中省略)
  434   1 S    0:00 -bash
  969   1 S    0:00  \_ sh /usr/X11R6/bin/startx
  970   1 S    0:00      \_ xinit /usr/X11R6/lib/X11/xinit/xinitrc --
  971  ?  S    0:02          \_ /usr/X11R6/bin/Xwrapper :0
  972   1 S    0:00          \_ /usr/X11R6/bin/wmaker
  977   1 S    0:00              \_ /usr/X11R6/bin/kinput2
  990   1 S    0:00              \_ wmclock -shape
  991   1 S    0:00              \_ xppxpm -wmaker -shape -geometry -0-0
(途中省略)

表示項目の意味

フラグ プロセスのフラグ。
UID プロセス所有者のユーザID。
PID プロセスID。
PPID 親プロセスのプロセスID.。
PRI task構造体のカウンタフィールド。
NI プロセスの優先度を表すniceの値。
-20が最高の優先度,19が最低の優先度。
サイズ プログラム部分とデータ部分とスタックを合計した仮想イメージの大きさ。
常駐 メモリ中に常駐している部分の大きさ。
WCHAN プロセスが休眠状態の時のカーネル関数名。
状態 プロセスの状態。
R 実行中(running)
S 休眠中(sleeping)
D 割り込み不可能な休眠中
T 停止中かトレース中
Z ゾンビプロセス
W 常駐ページがない
N プロセスのnice値(NI)が正の値(優先度が低い)
端末 プロセスを起動した端末
時間 プロセス起動後経過したCPU時間
コマンド プロセスを起動するときに実行したコマンド。

psコマンドの主なオプション

l 長い形式で詳細を表示。
u ユーザ名,CPU占有率,メモリ占有率,開始時刻などを表示
j PGID(プログラムグループID)などを表示
s シグナル形式
v vm形式
m メモリ状態の表示(pオプションと一緒に使うとメモリサイズをページ数で表示する)
f コマンドライン部分をプロセスの親子関係に基づいてツリー状に表示
a 自分以外のユーザのプロセスについても表示
x 制御端末のないプロセスの情報も表示
S 子プロセスのcpu時間とページフォールトを合計して表示
c task構造体中の実行ファイル名だけを表示
e コマンドラインの後ろに環境変数などを表示
w 表示内容が長い場合に,w一つあたり1行分表示行を増やす。つまり,wが一つだと2行に,wが二つだと3行に渡って表示される。
h ヘッダを表示しない
r 実行中のプロセスだけ表示
n USERとWCHANを数字で表示

topコマンド

top [-] [d delay] [q] [c] [S] [s] [i]

プロセサの時々刻々の状態変化を一定時間ごとに継続的に画面に表示する。
CPUやメモリ使用率の高いものから順に表示できる。

実行例

[toshim@gw2000 ~]$ top
12時53分(午後)  稼働  1時28分,  3 ユーザ,  負荷平均率: 0.00, 0.00, 0.00
プロセス: 合計 67, 待機中 61, 実行中 1, ゾンビ 0, 停止中 5
CPU状態 : ユーザ 1.9%, システム 1.9%, nice 3.8%, 待機96.2%
メモリ  : 合計127708K,  45928K使用,  81780K空き,  41000K共有,   1860Kバッファ
スワップ: 合計130748K,      0K使用, 130748K空き                18864Kキャッシュ

  PID ユーザ   PRI  NI サイズ 常駐 共有 状態  LIB %CPU %MEM   時間 コマンド
 2744 toshim    19  19   828  828   648 R N     0  3.8  0.6   0:00 top
    1 root       0   0   404  404   340 S       0  0.0  0.3   0:03 init
    2 root       0   0     0    0     0 SW      0  0.0  0.0   0:00 kflushd
    3 root     -12 -12     0    0     0 SW<     0  0.0  0.0   0:00 kswapd
    4 root       0   0     0    0     0 SW      0  0.0  0.0   0:00 md_thread
    5 root       0   0     0    0     0 SW      0  0.0  0.0   0:00 md_thread
  442 news       0   0   284  284   228 S       0  0.0  0.2   0:00 crosspost
  445 news       0   0   760  760   596 S       0  0.0  0.5   0:01 innwatch
  331 root       0   0   356  356   304 S       0  0.0  0.2   0:00 gpm
   36 root       0   0   364  364   308 S       0  0.0  0.2   0:00 kerneld
  226 bin        0   0   336  336   268 S       0  0.0  0.2   0:00 portmap
  166 root       0   0   420  420   348 S       0  0.0  0.3   0:00 dhcpcd

pstreeコマンド

pstree [-a] [-c] [-h] [-l] [-n] [-p] [-u] [-G|-U] [pid|user]

プロセスを親子関係に従ってツリー上に表示する。

実行例

[toshim@gw2000 ~]$ pstree
init-+-actived
     |-atd
     |-bash---startx---xinit-+-X
     |                       `-wmaker-+-kinput2
     |                                |-wmclock
     |                                `-xppxpm
     |-cannaserver
     |-crond
     |-dhcpcd
     |-gpm
     |-httpd---10*[httpd]
     |-inetd---in.telnetd---bash---bash---bash-+-man---man.exe---sh-+-gunzip
     |                                         |                    `-less
     |                                         `-pstree
(以下省略)

プロセスとシグナル

シグナルとは

Unix系のOSは,実行中のプロセスに外部から割り込んである情報を通知できる。
その情報通知をシグナルという。
通常,プロセスを再起動したり強制終了するときに,プロセスに対してシグナルを送る。
シグナルを送るときはkillコマンドを使う。
プロセスの所有者とスーパユーザがシグナルを送れることができる。

具体的になシグナルの詳細はこちらを参照。

プロセスの強制終了

kill -KILL <プロセスID>

プロセスにSIGKILLシグナルを送ると,プロセスは強制終了する。
killコマンドでシグナルを送る場合,シグナル名の先頭のSIGを省略してもよい。
killコマンドはシグナルを省略すると,SIGTERMシグナルを送る。

実行例

[toshim@gw2000 ~/work]$ ps
 PID 端末 状態 時間 コマンド
 3125  p0 S N  0:00 -bash
 3879  p0 T N  0:00 cat
 3880  p0 R N  0:00 ps
[toshim@gw2000 ~/work]$ kill -KILL 3879 ← SIGKILLシグナルをプロセス3879に送る
[1]+  Killed                  cat       ← SIGKILLシグナルを受け取ってcatコマンドが強制終了
[toshim@gw2000 ~/work]$ ps
 PID 端末 状態 時間 コマンド
 3125  p0 S N  0:00 -bash
 3881  p0 R N  0:00 ps

プロセスの再起動

Webサーバなどのバックグラウンドで動作するデーモンプロセスの設定を変更した場合など,プロセスを再起動したいときがある。
その場合にSIGHUPというシグナルを送ると再起動するものが多い。

実行例

                                                +----- プロセスの開始時間
[root@gw2000 ~]# ps axu|grep httpd              
nobody    4381  0.0  0.9  2016  1252   ?   S    13:54   0:00 httpd
nobody    4382  0.0  0.9  2016  1252   ?   S    13:54   0:00 httpd
nobody    4383  0.0  0.9  2016  1252   ?   S    13:54   0:00 httpd
nobody    4384  0.0  0.9  2016  1252   ?   S    13:54   0:00 httpd
nobody    4385  0.0  0.9  2016  1252   ?   S    13:54   0:00 httpd
nobody    4386  0.0  0.9  2016  1252   ?   S    13:54   0:00 httpd
nobody    4387  0.0  0.9  2016  1252   ?   S    13:54   0:00 httpd
nobody    4388  0.0  0.9  2016  1252   ?   S    13:54   0:00 httpd
nobody    4389  0.0  0.9  2016  1252   ?   S    13:54   0:00 httpd
nobody    4390  0.0  0.9  2016  1252   ?   S    13:54   0:00 httpd
root       342  0.0  0.9  2004  1240   ?   S    11:25   0:00 httpd ← これがhttpdの親プロセス
[root@gw2000 ~]# kill -HUP 342
[root@gw2000 ~]# ps axu|grep httpd
nobody    4644  0.5  0.9  2016  1252   ?   S    14:01   0:00 httpd ← 再起動したので子プロセスの開始時間が新しくなっている
nobody    4645  0.0  0.9  2016  1252   ?   S    14:01   0:00 httpd ← 再起動したので子プロセスの開始時間が新しくなっている
nobody    4646  0.0  0.9  2016  1252   ?   S    14:01   0:00 httpd ← 再起動したので子プロセスの開始時間が新しくなっている
nobody    4647  0.0  0.9  2016  1252   ?   S    14:01   0:00 httpd ← 再起動したので子プロセスの開始時間が新しくなっている
nobody    4648  0.5  0.9  2016  1252   ?   S    14:01   0:00 httpd ← 再起動したので子プロセスの開始時間が新しくなっている
nobody    4649  0.0  0.9  2016  1252   ?   S    14:01   0:00 httpd ← 再起動したので子プロセスの開始時間が新しくなっている
nobody    4650  0.0  0.9  2016  1252   ?   S    14:01   0:00 httpd ← 再起動したので子プロセスの開始時間が新しくなっている
nobody    4651  0.5  0.9  2016  1252   ?   S    14:01   0:00 httpd ← 再起動したので子プロセスの開始時間が新しくなっている
nobody    4652  0.0  0.9  2016  1252   ?   S    14:01   0:00 httpd ← 再起動したので子プロセスの開始時間が新しくなっている
nobody    4653  0.0  0.9  2016  1252   ?   S    14:01   0:00 httpd ← 再起動したので子プロセスの開始時間が新しくなっている
root       342  0.0  0.9  2004  1240   ?   S    11:25   0:00 httpd

プロセスの優先度変更

reniceコマンド

renice priority [[-p] pid ...] [[-g] pgrp ...] [[-u] user ...]

実行中のプロセスの優先度を変更する。
スーパユーザ(root)はpriority(nice値,優先度を表す)を任意の値に変更できるが,一般ユーザはnice値を上げ,優先度を下げることしかできない。

実行例

[toshim@gw2000 ~]$ ps l
 フラグ  UID   PID  PPID PRI  NI  サイズ 常駐 WCHAN     状態 端末 時間 コマンド
   100   500  3125  3124  18   0   1272   840 wait4       S   p0  0:00 -bash
100000   500  3137  3125  19   0   1536   600             R   p0  0:00 ps l
[toshim@gw2000 ~]$ renice +1 -p 3125      ← プロセスID3125のnice値を+1に設定する
3125: old priority 0, new priority 1
[toshim@gw2000 ~]$ ps l
 フラグ  UID   PID  PPID PRI  NI  サイズ 常駐 WCHAN     状態 端末 時間 コマンド
   100   500  3125  3124  10   1   1272   840 wait4       S N p0  0:00 -bash ← nice値(NI)が1になっている
100000   500  3139  3125  11   1   1536   600             R N p0  0:00 ps l
[toshim@gw2000 ~]$ renice +2 -u toshim    ← ユーザtoshimが所有するプロセスのnice値を+2に設定する
500: old priority 1, new priority 2
[toshim@gw2000 ~]$ ps l
 フラグ  UID   PID  PPID PRI  NI  サイズ 常駐 WCHAN     状態 端末 時間 コマンド
   100   500  3125  3124  18   2   1272   840 wait4       S N p0  0:00 -bash ← nice値(NI)が2になっている
100000   500  3369  3125  20   2   1536   600             R N p0  0:00 ps l

 

  
WB00806_.gif (471 バイト)
Copyright(C) 1997-1999 GlassCom
webmaster@glasscom.com