acctcomコマンドでは、/var/adm/pacctファイルに記録された終了プロセスの情報から、プロセスの起動/終了時刻やCPU使用時間などの情報を取り出すことが可能です。
acctcomコマンドで「-f」オプションを指定すると、実行例1のような内容が表示されます。各項目の意味は表1を、終了ステータス(シグナル)の詳細については表2を参照してください。
# acctcom -f
ACCOUNTING RECORDS FROM: (木) 11月25日16:26:29 2004
COMMAND START END REAL CPU MEAN
NAME USER TTYNAME TIME TIME (SECS) (SECS) SIZE(K) F STAT
sh root pts/2 16:26:29 16:26:29 0.04 0.03 1000.00 40 0
logadm root pts/2 16:26:29 16:26:29 0.33 0.06 554.67 40 0
turnacct root pts/2 16:26:29 16:26:29 0.34 0.01 512.00 40 0
mv root pts/2 16:26:29 16:26:29 0.08 0.01 616.00 40 0
closewtm root pts/2 16:26:29 16:26:29 0.04 0.01 856.00 40 0
cp root pts/2 16:26:30 16:26:31 1.49 0.06 810.67 40 0
acctwtmp root pts/2 16:26:31 16:26:31 0.01 0.01 448.00 40 0
項目 | 意味 |
---|---|
MEAN SIZE | 平均メモリサイズ |
F | fork/exec実行時のフラグ(8進数)。表示される値は、AFORK(forkは実行されたが、execが実行されていない状態)が「001」、ASU(スーパーユーザー特権で実行)が「002」、AEXPND(拡張レコードタイプを使用。デフォルト)が「040」 |
STAT | プロセスの終了ステータス(8進数)。下2桁のみが意味を持つため、例えば「203」の場合は「03」と読み替える。正常終了は「00」 |
シグナル名 | 番号 | アクション概要 |
---|---|---|
SIGHUP | 1 | 強制終了ハングアップ |
SIGINT | 2 | 強制終了割り込み |
SIGQUIT | 3 | コアファイル出力終了 |
SIGILL | 4 | コアファイル出力不正な命令 |
SIGTRAP | 5 | コアファイル出力トレーストラップ |
SIGABRT | 6 | コアファイル出力異常終了 |
SIGEMT | 7 | コアファイル出力エミュレーショントラップ |
SIGFPE | 8 | コアファイル出力浮動小数点例外 |
SIGKILL | 9 | 強制終了プロセスの強制終了 |
SIGBUS | 10 | コアファイル出力バスエラー |
SIGSEGV | 11 | コアファイル出力セグメンテーション違反 |
SIGSYS | 12 | コアファイル出力引数が不正なシステムコール |
SIGPIPE | 13 | 強制終了読み手のないパイプへの書き込み |
SIGALRM | 14 | 強制終了アラームクロック |
SIGTERM | 15 | 強制終了プロセスの終了 |
SIGPOLL | 22 | 強制終了ポーリング可能イベントの発生 |
SIGSTOP | 23 | 停止プロセスの停止(捕捉や無視は不可能) |
SIGTSTP | 24 | 停止ユーザーからのプロセス停止要求 |
SIGTTIN | 26 | 停止バックグラウンドプロセスからのtty入力要求 |
SIGTTOU | 27 | 停止バックグラウンドプロセスからのtty出力要求 |
SIGVTALRM | 28 | 強制終了仮想タイマーの時間超過 |
SIGPROF | 29 | 強制終了プロファイリングタイマーの時間超過 |
SIGXCPU | 30 | コアファイル出力CPU使用時間制限の超過 |
SIGXFSZ | 31 | コアファイル出力ファイルサイズ制限の超過 |
プロセスが異常終了し、プロセスの終了ステータスが正常終了以外になった場合の例を紹介します。ここでは、実行中のfindコマンドに対してkillコマンドで各シグナルを送信し、findコマンドが異常終了した後にacctcomコマンドを実行してみます。
まずは、findコマンドを次のように実行します。これは、後述するシグナルの送信に合わせて6回実行することになります。
# find / -print > /dev/null
findコマンド実行後、psコマンドによってプロセスIDを確認し、killコマンドで各シグナルを送信します(実行例2)。
# find / -print > /dev/null
# kill -s SIGHUP <プロセスID> ← SIGHUP(1)を送信
# find / -print > /dev/null
# kill -s SIGINT <プロセスID> ← SIGINT(2)を送信
# find / -print > /dev/null
# kill -s SIGQUIT <プロセスID> ← SIGQUIT(3)を送信
# find / -print > /dev/null
# kill -s SIGABRT <プロセスID> ← SIGABRT(6)を送信
# find / -print > /dev/null
# kill -s SIGBUS <プロセスID> ← SIGBUS(10)を送信
# find / -print > /dev/null
# kill -s SIGTERM <プロセスID> ← SIGTERM(15)を送信
killコマンド実行後、
# acctcom -f
のようにacctcomコマンドを実行すると、リスト1のような出力となり、「STAT」の項目には受信したシグナルの種類が表示されます。この値を表2の内容と照らし合わせて、例えば「12」であれば「異常終了の原因はバスエラーであるため、コアファイルが残っているはず」などの情報が取得できるわけです。
Copyright © ITmedia, Inc. All Rights Reserved.