2009-05-19 22 views
10

私はプロセスが何をしているかを調べる方法は?

、これは/ procの/ PIDディレクトリから確認することができます知っているが、どのように知っていない、

は、いずれかが私に道を示すことができますか?

+0

これはserverfault.comに属しています。私は(ファイルシステム経由でプロセスを監視するよう求めています)さらに、あなたがもっとあなたを助けるためにプロセスについてモニタリングしたいものを具体的に教えてほしい –

+0

私はPHPプログラムの監視を探しています – omg

+0

それについて...それのメモリ消費、ネットワーク活動、 ...? –

答えて

5

プロセスが行っているシステムコールを監視する場合は、straceを参照してください。

+0

私は、PHPプログラムの監視を探しています。 それは役に立ちますか? – omg

+0

少なくとも、PHPインタープリタが呼び出すシステムコールを教えてくれるでしょう。 PHPスクリプトが何をしているかによって、それは役に立つかもしれませんし、そうでないかもしれません。それ以外の場合は、PHPのデバッグを調べることができます。 –

+0

私はxmppロボットを監視しています – omg

0

私はstraceコマンドに依存しています。しかし、プロセスがどのシステムコールを作成しているかだけを伝えるだけです。しかし、十分である可能性があります。

実行中のプロセスを実行時にstraceにバインドすることは可能です。

明らかに、gdbも使用できます。

+0

straceを使ってPHPプログラムが何をしているのかを説明するデモを行うことはできますか? – omg

0

お探しの情報はありますか?/proc/pidにある擬似ディレクトリは、かなり説明する必要があります。それは本当にあなたの探しているものによって異なります。一般的なmemとcpuの使い方については、topのようなツールは設定された間隔の統計を更新するのでおそらく良いでしょう。

+0

私はxmppロボットを監視していますが、プロセスがまだ生きている間に簡単にオフラインになるので、その理由を調べています。 – omg

8

通常、straceはこの質問に対する答えです。最も簡単な方法は、例えば、直接、straceのを使用してコマンドを実行することです:

[email protected]:~$ strace ls 
execve("/bin/ls", ["ls"], [/* 16 vars */]) = 0 
brk(0)         = 0x9fa8000 
access("/etc/ld.so.nohwcap", F_OK)  = -1 ENOENT (No such file or directory) 
mmap2(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7f0a000 
access("/etc/ld.so.preload", R_OK)  = -1 ENOENT (No such file or directory) 

これは、すでにPHPなどのプロセスを実行するために動作しません。幸運にも、-pパラメータを使用して既存のプロセスにstraceを添付することもできます。たとえば、次のようにあなたにも -fパラメータを使用する必要があり、他のプロセスを起動デーモンの

[email protected]:~$ strace -p 3761 
Process 3761 attached - interrupt to quit 
select(16, [5 7 8], NULL, [5 7 8], {0, 580000}) = 0 (Timeout) 
alarm(0)        = 62 
rt_sigprocmask(SIG_BLOCK, [ALRM], [], 8) = 0 
rt_sigaction(SIGALRM, {SIG_DFL}, {0x809a270, [], 0}, 8) = 0 
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0 

常に役に立つストレスの他に、ltraceもご覧ください。 ltraceはstraceに似ていますが、システムコールの代わりにライブラリ呼び出しを表示します。例:

[one;~]-6> ltrace ls 
__libc_start_main(0x804e5f0, 1, 0xbfdb7254, 0x8059a10, 0x8059a00 <unfinished ...> 
setlocale(6, "")                     = "LC_CTYPE=en_GB.UTF-8;LC_NUMERIC="... 
bindtextdomain("coreutils", "/usr/share/locale")             = "/usr/share/locale" 
textdomain("coreutils")                   = "coreutils" 
__cxa_atexit(0x8051860, 0, 0, 0xb7f65ff4, 0xbfdb71b8)           = 0 
isatty(1)                      = 1 
getenv("QUOTING_STYLE")                   = NULL 

あなたはまた、内部のlibcのかなりの量が同様に呼び出して、その出力が予想よりもより詳細な可能性が表示されますのでご注意ください。

+0

トレースしているもののサブプロセスに従う 'strace -f'について学んだとき、私にとっても大きな助けとなりました。最後に、 '/ proc/'の内容を 'strace -f'の左側の数字で調べると、追加情報を取得することができます。 – erikbwork

関連する問題