我有进程 ID 1234。这个进程包含线程 ID 1235。
当我使用时,ls -l /proc我只能看到 pid (1234),但是当我使用打开线程状态文件时,cat /proc/1235/status我可以看到数据。
这是为什么?
可以直接用tid用C代码访问吗?/proc/1235/mem不知道进程ID?
Ste*_*itt 10
是的,/proc“包含”线程标识符和进程标识符的目录条目,但只有后者被枚举getdents,所以ls只显示进程标识符。从手册页项目的 5.00 版开始man 5 proc,在“概述”部分中对此进行了描述:
/proc/[pid]子目录
所述的/ proc / [PID]子目录是可见的,当通过迭代/ proc中与
getdents(2)(并因此是可见的,当一个用途ls(1),以查看的内容的/ proc)。/proc/[tid]子目录
所述的/ proc / [TID]子目录不可见时,通过迭代的/ proc与
getdents(2)(并因此是不可见的,当一个用途ls(1),以查看的内容的/ proc)。
这是为什么?
我怀疑这是为了保持向后兼容性(对于在 Linux 上以当前形式存在线程之前编写的程序),并限制可伸缩性问题。
可以直接用tid用C代码访问吗?
/proc/1235/mem不知道进程ID?
是的,如果您知道 tid,您可以/proc/${tid}直接访问,而无需通过 pid。