LoginSignup
2
1

More than 5 years have passed since last update.

プロセスのコール・シグナルを追うtruss/straceコマンド

Last updated at Posted at 2018-03-26

プロセスのコール・シグナルを追うtruss/straceコマンド

コマンドの説明

 IBM Knowledge Center - truss コマンドより抜粋。

プロセスのシステム・コール、動的にロードされたユーザー・レベル機能のコール、 受信されたシグナル、引き起こされたマシン・フォールトをトレースします。

どんなときに使うの?

 シェルやミドルウェアのトラブルで、以下のようなときに問題解決に使えます。
- psしてもよく分からない
- ログに何も残っていない
- 現象が発生するが原因がつかめない
- 不審なプロセスを発見したのでどんな動きをしているのか調査したい

コマンド実行例

 findコマンドに対してtrussした例がこちら。

$ truss find .
execve("/usr/bin/find", 0x2FF22AE8, 0x20013AC8)  argc: 2
read_sysconfig(0xF07A5058, 0x00000010, 0xFFFFFFFD, 0x10000000, 0x30000930, 0x00000080, 0x06010000, 0xF08172A0) = 0x00000000
sbrk(0x00000000)                                = 0x301A1B7C
vmgetinfo(0x2FF22420, 7, 16)                    = 0
sbrk(0x00000000)                                = 0x301A1B7C
sbrk(0x00000004)                                = 0x301A1B7C
__libc_sbrk(0x00000000)                         = 0x301A1B80
sys_parm(0, 14, 0x2FF22980)                     = 0
__libc_sbrk(0x00000000)                         = 0x301B1B90
getuidx(4)                                      = 10005
getuidx(2)                                      = 10005
getuidx(1)                                      = 10005
getgidx(4)                                      = 400
getgidx(2)                                      = 400
getgidx(1)                                      = 400
__loadx(0x01480080, 0x2FF21680, 0x00000A50, 0x2FF221E0, 0x00000000) = 0xD06D0128

(中略)

close(5)                                        = 0
kfcntl(1, F_GETFL, 0x00000000)                  = 67110914
kfcntl(1, F_GETFL, 0x0001AF70)                  = 67110914
kfcntl(2, F_GETFL, 0x2FF22FFC)                  = 67110914
_exit(0)

 Linuxの場合、straceコマンドを使います。

# strace find . | more
execve("/bin/find", ["find", "."], [/* 28 vars */]) = 0
brk(0)                                  = 0x1336000
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fdf40749000
access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY)      = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=100642, ...}) = 0
mmap(NULL, 100642, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7fdf40730000
close(3)                                = 0
open("/lib64/librt.so.1", O_RDONLY)     = 3

(中略)

close(3)                                = 0
close(1)                                = 0
munmap(0x7fdf40746000, 4096)            = 0
close(2)                                = 0
exit_group(0)                           = ?
+++ exited with 0 +++
.

参考

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1