/proc/ 是否包含 tid?

/proc/ 是否包含 tid?

我的进程 ID 为 1234。该进程包含线程 ID 1235。

当我使用时,ls -l /proc我只能看到 pid (1234),但是当我使用打开线程状态文件时,cat /proc/1235/status我可以看到数据。

这是为什么?

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

答案1

是的,/proc“包含”线程标识符和进程标识符的目录条目,但只有后者被 枚举getdents,因此ls仅显示进程标识符。这在man 5 proc,在“概述”部分中,因为手册页项目 5.00 版:

/proc/[pid]子目录

/proc/[pid]迭代时子目录可见/进程getdents(2)(因此当人们使用时可见ls(1)查看内容/进程)。

/proc/[tid]子目录

/proc/[tid]子目录是不是迭代时可见/进程getdents(2)(因此是不是使用时可见ls(1)查看内容/进程)。

这是为什么?

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

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

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

如果要枚举线程,可以列出下面的目录条目/proc/${tid}/task/(这适用于任何线程标识符,而不仅仅是进程标识符)。

相关内容