You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 05:12:05