是在 execv() 映射新进程之后的第一个 mmap 调用吗?

是在 execv() 映射新进程之后的第一个 mmap 调用吗?

假设我有以下 bash 脚本

#!/usr/bin/bash

ls *.py

现在我运行strace -f ./test.sh,我在输出中看到以下内容:

[pid 25916] execve("/usr/bin/ls", ["ls", "test2.py", "test.py"], [/* 28 vars */]) = 0
[pid 25916] brk(NULL)                   = 0x1c7a000
[pid 25916] mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fbb616ae000
[pid 25916] access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory)
[pid 25916] open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3

我理解这brk()部分来自这个答案,但是通话呢mmap()

这是过程映像的映射(部分)吗?或者在调用时brk(),新子进程的映像已经被替换?

相关内容