Powered by SmartDoc

プロセス管理

現在のOSは複数のプログラムを同時に実行できるマルチタスク機能を持っている。ウィンドウを表示したり、端末の画面への出力しながら実行されるプログラムや画面への出力が無く動作するプログラムもある。プログラムの実行単位をプロセスという。プロセスに関すコマンドを示す。

psコマンド

プロセスの状態を表示するコマンドで、書式とオプションは次の通り。

psコマンドの書式
$ ps [オプション]
psコマンドのオプション
オプション 意味
-a すべてのプロセスを表示
-f ツリー状に表示
-l 詳細な情報を表示
-u プロセスを実行しているユーザ名も表示
-w 長い行も表示
-x デーモンプロセスも表示

例えば、全てのプロセスとデーモンを表示するときは次のコマンドを実行する。コマンドの出力はプロセスの番号(PID)、実行している端末(TTY)、プロセスの状態(STAT)、プロセスの累積時間(TIME)、実行ファイル名(COMMAND)の順で出力される。

全てのプロセスを表示する
$ ps -ax  
 PID TTY      STAT   TIME COMMAND
   1 ?        Ss     0:01 init [5]         
   2 ?        S<     0:00 [kthreadd]
...
省略
...
6828 ?        S      0:00 /usr/sbin/httpd -k start
6829 ?        S      0:00 /usr/sbin/httpd -k start
6830 pts/0    R+     0:00 ps ax

また、プロセスの中でhttpdという名前のプログラムを探したときはpsコマンドの出力をパイプを使いgrepコマンドにつなげて検索すればよい。

プロセスの検索
$ ps ax | grep httpd
 6821 ?        Ss     0:00 /usr/sbin/httpd -k start
 6822 ?        S      0:00 /usr/sbin/httpd -k start
 6823 ?        S      0:00 /usr/sbin/httpd -k start
 6824 ?        S      0:00 /usr/sbin/httpd -k start
 6825 ?        S      0:00 /usr/sbin/httpd -k start
 6826 ?        S      0:00 /usr/sbin/httpd -k start
 6827 ?        S      0:00 /usr/sbin/httpd -k start
 6828 ?        S      0:00 /usr/sbin/httpd -k start
 6829 ?        S      0:00 /usr/sbin/httpd -k start
 7390 pts/0    S+     0:00 grep httpd

pgrep

grepコマンドを組み合わせる以外にプロセスの一覧を調べるにはpgrepコマンドを使えばよい。

pgrepコマンドの実行例
$ pgrep httpd
6821
6822
6823
6824
6825
6826
6827
6828
6829

killコマンド

killコマンドはプロセスにシグナルを送信し、プロセスの状態を遷移させるために使う。各プロセスは異なるユーザ権限で実行されているので権限のあるユーザからのシグナルしか受け取れない。

killコマンドの書式を示す。PIDはProcess IDのことである。PIDはpsコマンドで取得する。

killコマンドの書式
kill -シグナル PID

シグナル

killコマンドで送信するシグナルとはプロセスの対する動作の指示で、PIDは複数指定できる。複数指定するときはスペースで区切る。

主なシグナル
シグナル名 シグナル番号 意味
HUP 1 ハングアップ、設定の再読み込み
INT 2 割り込み、一時停止
KILL 9 強制終了
TERM 15 終了
TSTP 19 サスペンド

利用例

PID 1234のプロセスを強制終了する。

使用例
# kill -KILL 1234
# kill -9 1234

PIDは/var/runにサービスやデーモン名で保存されている。これを利用する場合は次のように`(バッククオート)を使い、ファイルの内容を使い、実行する。

PIDファイルからPIDを取得し実行
# kill -9 `cat /var/run/xxx.pid`

killall

プロセス名を指定してプロセスを停止するときはkillallコマンドを使う。

killallコマンドの書式
killall プロセス名

jobsコマンド

バックグランドジョブの一覧を表示するシェル内のコマンド。

バックグランドで実行されているジョブがある場合、そのリストが次のように表示される。

jobsの実行例
$ jobs
[1]-  Running                 du -sh ~/ &
[2]+  Running                 find ~/ -name test.txt &

プログラムをバックグランドで実行するにはコマンドラインの最後に&記号を付ければよい。