/proc/ 是否包含 tid?

pro*_*ess 6 process proc

我有进程 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]子目录可见时,通过迭代的/ procgetdents(2)(并因此是可见的,当一个用途ls(1),以查看的内容的/ proc)。

这是为什么?

我怀疑这是为了保持向后兼容性(对于在 Linux 上以当前形式存在线程之前编写的程序),并限制可伸缩性问题。

可以直接用tid用C代码访问吗?/proc/1235/mem不知道进程ID?

是的,如果您知道 tid,您可以/proc/${tid}直接访问,而无需通过 pid。