acctcomコマンドによる終了ステータスの確認UNIX処方箋(2/2 ページ)

» 2008年02月25日 00時00分 公開
[ITmedia]
前のページへ 1|2       

acctcomコマンドによる終了ステータス

 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

実行例1 acctcomコマンドによる出力
項目 意味
MEAN SIZE 平均メモリサイズ
F fork/exec実行時のフラグ(8進数)。表示される値は、AFORK(forkは実行されたが、execが実行されていない状態)が「001」、ASU(スーパーユーザー特権で実行)が「002」、AEXPND(拡張レコードタイプを使用。デフォルト)が「040」
STAT プロセスの終了ステータス(8進数)。下2桁のみが意味を持つため、例えば「203」の場合は「03」と読み替える。正常終了は「00」
表1 acctcomコマンドの主な項目
シグナル名 番号 アクション概要
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 コアファイル出力ファイルサイズ制限の超過
表2 主なシグナルとデフォルトアクション

プロセス異常終了のテスト

 プロセスが異常終了し、プロセスの終了ステータスが正常終了以外になった場合の例を紹介します。ここでは、実行中の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)を送信

実行例2 findプロセスに各シグナルを送信

 killコマンド実行後、

# acctcom -f


のようにacctcomコマンドを実行すると、リスト1のような出力となり、「STAT」の項目には受信したシグナルの種類が表示されます。この値を表2の内容と照らし合わせて、例えば「12」であれば「異常終了の原因はバスエラーであるため、コアファイルが残っているはず」などの情報が取得できるわけです。

リスト1 各シグナル受信時のログ

関連キーワード

サーバ | 運用管理 | Solaris | UNIX | UNIX処方箋


前のページへ 1|2       

Copyright © ITmedia, Inc. All Rights Reserved.

注目のテーマ