为何bpftrace无法捕获pwd命令的getcwd系统调用但strace可以?
为什么bpftrace捕获不到pwd命令的getcwd系统调用?
pwd大概率是Shell内置命令:多数主流Shell(比如Bash、Zsh)都将
pwd实现为内置命令,执行pwd时不会启动独立的pwd进程,而是由当前Shell进程直接调用getcwd系统调用。你的bpftrace命令打印的comm是进程名,这时候会显示Shell的名字(比如bash)而非pwd,可能你因为没看到pwd字样就误以为没有输出。验证方式:执行
type pwd,如果输出是pwd is a shell builtin,就说明是内置命令。若要触发外部pwd程序,直接执行绝对路径/bin/pwd,此时再运行你的bpftrace命令,就能抓到进程名为pwd的调用记录。核对tracepoint名称与内核版本匹配度:少数内核版本中,系统调用的tracepoint命名可能存在差异。你可以用
bpftrace -l 'tracepoint:syscalls:*getcwd*'命令列出所有和getcwd相关的tracepoint,确认命令中使用的名称正确无误。
内容的提问来源于stack exchange,提问作者idiot one
相关产品推荐
相关产品推荐

