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

这里是什么6331意思?

4

1 回答 1

2

6331您的示例中是进程 ID;strace(1)当您使用-for-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)(这是 Linuxfork()在较新版本的内核中实现的方式)。

于 2011-03-25T09:10:34.147 回答