我有进程编号1234。此进程包含线程id 1235。
当我使用ls -l /proc时,我只看到pid (1234),但是当我使用cat /proc/1235/status打开线程状态文件时,我可以看到数据。
为什么会这样呢?
我可以直接用tid访问C代码吗?/proc/1235/mem,而不知道进程id?
发布于 2020-09-07 11:58:37
是的,/proc“包含”线程标识符和进程标识符的目录条目,但只有后者由getdents枚举,因此ls只显示进程标识符。这在man 5 proc中的“概述”部分中有描述,因为手册页项目第5.00版:
/proc/子目录当使用/proc迭代
getdents(2)时/proc/子目录是可见的(因此,当您使用ls(1)查看/proc的内容时也是可见的)。/proc/子目录/proc/子目录在使用/proc迭代getdents(2)时是不可见的(因此在使用ls(1)查看/proc内容时不可见)。为什么会这样呢?
我怀疑这是为了保持向后兼容性(对于在Linux上线程以当前形式存在之前编写的程序),并限制可伸缩性问题。
我可以直接用tid访问C代码吗?
/proc/1235/mem,而不知道进程id?
是的,如果您知道tid,您可以直接访问/proc/${tid},而无需经过pid。
如果要枚举线程,可以在/proc/${tid}/task/下列出目录条目(这适用于任何线程标识符,而不仅仅是进程标识符)。
https://unix.stackexchange.com/questions/608297
复制相似问题