为何strace接受fork()作为参数,实际系统调用为clone()?
关于strace接受trace=fork参数却统计为0的解释
- 首先明确:现代Linux里
fork()确实不是直接的系统调用,它是glibc提供的库函数,内部通过调用带特定参数的clone()系统调用来实现功能。 - strace允许你指定
fork作为trace参数,是出于用户友好性的兼容设计:开发者普遍习惯用fork()这个接口名称,strace没必要强迫用户去记住底层实际调用的clone(),所以特意把这些常见的库封装函数名也纳入了可接受的参数列表。 - 但因为程序实际执行的是
clone()系统调用,没有直接触发fork系统调用(现在根本不存在这个系统调用号),所以strace -e trace=fork -c ./program的统计结果自然是0。strace不会报错,是因为它把fork当作有效的“逻辑调用名”来处理,而非仅严格匹配实际存在的系统调用号。
内容的提问来源于stack exchange,提问作者aaabbbccc
相关产品推荐
相关产品推荐

