【发布时间】:2020-10-14 19:29:51
【问题描述】:
我的理解是,当我们在终端输入ls时:
- 它调用
fork()库函数调用系统调用clone()创建一个子进程。 - 然后调用系统调用
execve()将新创建的进程的地址空间替换为新的内容。
在这种情况下,我希望在strace ls 输出中看到系统调用clone() 和execve()。但我只看到execve() 而不是clone()。
可能是什么原因?
我尝试了以下命令:
strace ls
strace -c ls
strace -f ls
操作系统 - 红帽
【问题讨论】:
-
尝试
strace strace ls以获得启发。strace仅在进程被分叉后才开始跟踪进程。这确实是它可以工作的唯一方法,你无法追踪一个不存在的进程。
标签: linux linux-kernel system-calls ls strace