![在引入线程组之前查找属于 POSIX 进程的所有任务](https://linux22.com/image/12603/%E5%9C%A8%E5%BC%95%E5%85%A5%E7%BA%BF%E7%A8%8B%E7%BB%84%E4%B9%8B%E5%89%8D%E6%9F%A5%E6%89%BE%E5%B1%9E%E4%BA%8E%20POSIX%20%E8%BF%9B%E7%A8%8B%E7%9A%84%E6%89%80%E6%9C%89%E4%BB%BB%E5%8A%A1.png)
以下引自POSIX 线程和 Linux 内核描述了内核 2.4 中引入线程组之前的状态:
将 POSIX 兼容性添加到 Linux 的基本障碍之一是,Linux 没有简单的方法将所有任务组合在一起,这些任务是 POSIX 所谓的进程的一部分,并迭代它们。可以找到具有相同地址空间的所有任务,但只能通过查看系统中的所有任务来实现。这限制了可以在内核级别添加的内容。
我很好奇为什么查找所有任务(POSIX 称之为进程的一部分)的唯一选择是look at all tasks in the system
?
为什么下面的逻辑行不通?
- 给定特定任务的句柄,找到具有相同地址空间的最早祖先(这里假设每个任务都有一个从其克隆的任务的句柄)
- 搜索最早的任务下具有相同地址空间的所有任务祖先子树(这里假设每个任务都有其所有克隆任务的句柄)
- 搜索子树下具有相同地址空间的所有任务init
(这里假设init的任务是任务树的根)
看起来工作量很大,但仍然比迭代所有任务的时间复杂度要低。