2
6331  execve("./a.out", ["./a.out"], [/* 22 vars */]) = 0
6331  brk(0)                            = 0x601000

ここでどういう6331意味ですか?

4

1 に答える 1

2

あなたの6331例では、プロセスIDです。またはstrace(1)、他のプログラムを生成するプログラムにフラグを立てるときに便利です。簡単な例として、これを試してください。-f-F

strace -o /tmp/out -fF /etc/init.d/cron status

(そのinitscriptには魔法のようなものは何もありません、私はそれがあなたのシステム上にあるスクリプトであると思っただけです。)

この/tmp/outファイルには、いくつかのプロセスからの出力が表示され、それぞれにpidのプレフィックスが付けられます。

22631 read(10, "#!/bin/sh -e\n# upstart-job\n#\n# S"..., 8192) = 1826
22631 pipe([3, 4])                      = 0
22631 clone(child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7fcb01efd9d0) = 22632
22631 close(4)                          = 0
22632 close(10 <unfinished ...>
22631 read(3,  <unfinished ...>
22632 <... close resumed> )             = 0
22632 close(3)                          = 0
22632 dup2(4, 1)                        = 1
22632 close(4)                          = 0
22632 stat("/home/sarnold/bin/basename", 0x7fffb751ce30) = -1 ENOENT (No such file or directory)

呼び出しで新しいプロセスが作成されたことを確認できます(これは、新しいバージョンのカーネルでclone(2)Linuxが実装した方法です)。fork()

于 2011-03-25T09:10:34.147 に答える