6331 execve("./a.out", ["./a.out"], [/* 22 vars */]) = 0
6331 brk(0) = 0x601000
6331
在这里意味着什么?
答案 0 :(得分:1)
示例中的6331
是进程ID;当strace(1)
使用-f
或-F
标记产生其他程序的程序时,它会派上用场。有关快速示例,请尝试以下操作:
strace -o /tmp/out -fF /etc/init.d/cron status
(简介没有什么神奇之处,我只是认为它是你系统中的一个脚本。)
/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()
的方式)。