在引入线程组之前查找属于 POSIX 进程的所有任务

在引入线程组之前查找属于 POSIX 进程的所有任务

以下引自POSIX 线程和 Linux 内核描述了内核 2.4 中引入线程组之前的状态:

将 POSIX 兼容性添加到 Linux 的基本障碍之一是,Linux 没有简单的方法将所有任务组合在一起,这些任务是 POSIX 所谓的进程的一部分,并迭代它们。可以找到具有相同地址空间的所有任务,但只能通过查看系统中的所有任务来实现。这限制了可以在内核级别添加的内容。

我很好奇为什么查找所有任务(POSIX 称之为进程的一部分)的唯一选择是look at all tasks in the system

为什么下面的逻辑行不通?
- 给定特定任务的句柄,找到具有相同地址空间的最早祖先(这里假设每个任务都有一个从其克隆的任务的句柄)
- 搜索最早的任务下具有相同地址空间的所有任务祖先子树(这里假设每个任务都有其所有克隆任务的句柄)
- 搜索子树下具有相同地址空间的所有任务init(这里假设init的任务是任务树的根)

看起来工作量很大,但仍然比迭代所有任务的时间复杂度要低。

相关内容