現在のOSは複数のプログラムを同時に実行できるマルチタスク機能を持っている。ウィンドウを表示したり、端末の画面への出力しながら実行されるプログラムや画面への出力が無く動作するプログラムもある。プログラムの実行単位をプロセスという。プロセスに関すコマンドを示す。
プロセスの状態を表示するコマンドで、書式とオプションは次の通り。
$ 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
grepコマンドを組み合わせる以外にプロセスの一覧を調べるにはpgrepコマンドを使えばよい。
$ pgrep httpd 6821 6822 6823 6824 6825 6826 6827 6828 6829
killコマンドはプロセスにシグナルを送信し、プロセスの状態を遷移させるために使う。各プロセスは異なるユーザ権限で実行されているので権限のあるユーザからのシグナルしか受け取れない。
killコマンドの書式を示す。PIDはProcess IDのことである。PIDはpsコマンドで取得する。
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にサービスやデーモン名で保存されている。これを利用する場合は次のように`(バッククオート)を使い、ファイルの内容を使い、実行する。
# kill -9 `cat /var/run/xxx.pid`
プロセス名を指定してプロセスを停止するときはkillallコマンドを使う。
killall プロセス名
バックグランドジョブの一覧を表示するシェル内のコマンド。
バックグランドで実行されているジョブがある場合、そのリストが次のように表示される。
$ jobs [1]- Running du -sh ~/ & [2]+ Running find ~/ -name test.txt &
プログラムをバックグランドで実行するにはコマンドラインの最後に&記号を付ければよい。