Warning message

This translation is outdated. For the most up-to-date information, please refer to the English version.

プロセスへの SIGKILL の送信元を追跡する方法

Solution Unverified - Updated -

Environment

  • Red Hat Enterprise Linux 4
  • Red Hat Enterprise Linux 5
  • Red Hat Enterprise Linux 6

Issue

プロセスが突然終了した問題について調査していて、プロセスが SIGKILL シグナルを受信したことを突き止めました。
ただし、その kill の理由について説明しているログメッセージがありません。誰がそのプロセスに kill シグナルを送信したのか、どのようにして確認できますか?

Resolution

audit の使用

kill シグナルをキャプチャーする監査ルールを設定できます。
以下のようなルールです。

# auditctl  -a exit,always -F arch=b64 -S kill
# auditctl  -a exit,always -F arch=b32 -S kill
# auditctl  -a exit,always -F arch=b64 -S tkill
# auditctl  -a exit,always -F arch=b32 -S tkill
# auditctl  -a exit,always -F arch=b64 -S tgkill
# auditctl  -a exit,always -F arch=b32 -S tgkill

次に、以下のようにプロセスの kill を試してください。

# killall -9 <procname>

これにより、以下のような結果が /var/log/audit/audit.log に出力されます。

type=SYSCALL msg=audit(1342619362.183:8): arch=40000003 syscall=37 success=yes exit=0
 a0=f5d a1=9 a2=f5d a3=0 items=0 pid=3936 auid=4294967295 uid=0 gid=0 euid=0 suid=0
 fsuid=0 egid=0 sgid=0 fsgid=0 comm="killall" exe="/usr/bin/killall"

説明:

  • syscall=37 は、audit によって傍受された syscall のコードを示しています。
  • pid=3936 はそのコールを行っているプロセスの PID です。

RHEL4 で利用可能な syscall の一覧とその番号は、それぞれ以下のファイルに記載されています。

  • /usr/src/kernels/<version>/include/asm-i386/unistd.h for i386 systems
  • /usr/src/kernels/<version>/include/asm-x86_64/unistd.h for x86_64 systems

これらのファイルは、kernel-devel rpm パッケージに含まれています。

SystemTap の使用

1) システムタップをインストールします
2) sigmon Systentap スクリプトを使用します。

This solution is part of Red Hat’s fast-track publication program, providing a huge library of solutions that Red Hat engineers have created while supporting our customers. To give you the knowledge you need the instant it becomes available, these articles may be presented in a raw and unedited form.