为何用ThreadSanitizer运行程序时/proc/$pid/comm值变为exe?
ThreadSanitizer 导致 /proc/$pid/comm 显示为 "exe" 的原因
这是GCC 7.3.0配套的ThreadSanitizer(TSAN)的固有行为:
- TSAN运行时会通过系统调用
prctl(PR_SET_NAME, "exe")主动修改进程的内核态名称,也就是/proc/$pid/comm读取的内容。 ps命令显示的是进程启动时命令行参数里的程序名,这个不会被TSAN修改,因此会和/proc/$pid/comm的内容出现差异。
这个设计是早期TSAN用来标识被插桩(instrumentation)进程的方式,在后续的GCC版本(比如GCC 8及以后)中,TSAN已经调整了该逻辑,会保留原始程序名称,不再将comm字段改为"exe"。如果需要避免这个问题,可以考虑升级你的GCC版本。
内容的提问来源于stack exchange,提问作者log log
相关产品推荐
相关产品推荐

