【问题标题】:Can a child process generated by "fork()" ever have a process id lesser than its parent?由“fork()”生成的子进程的进程 ID 是否小于其父进程?
【发布时间】:2014-03-05 08:19:39
【问题描述】:

fork() 生成的子进程的进程 ID 是否可以小于其父进程(不超过最大限制)?

PID 通常是下一个可用值,但无论如何它可能小于父级的 PID?

【问题讨论】:

  • 假设系统上可能的最大 PID 是 32767(参数对于任意最大值都是相同的)。假设进程 32767 调用 fork()。关于新创建的子进程的PID,我们能说什么?
  • 计数器将重置,然后从 0 开始分配新的 PID,但为什么是下一个数字,为​​什么不是最不可用的 id(就像我们在分配文件描述符的情况下一样)
  • 我不知道关于如何分配 PID 有任何标准。只要当前正在运行的进程的所有 PID 都是唯一的,分配尚未分配的下一个序列号或尚未分配的最低编号都是完全合法的。让死进程的 PID 尽可能长时间地“闲置”可能有一些优势。我的观点是如果进程32767调用fork(),子进程的PID必须小于父进程的PID。
  • "我知道新的 PID 总是下一个可用值" -- 你怎么知道的?

标签: c linux fork fedora pid


【解决方案1】:

是的。 PID 不保证按任何顺序排列。一些系统和一些安全扩展会生成随机 PID,以避免基于子 PID 预测的攻击。当然,即使是线性生成 PID 的系统也需要在某个时候回绕。

【讨论】:

  • 也就是说没有特定的规则来分配进程ID?
  • 是的,这就是随机的意思。您唯一可以说的是,PID 将是pid_t 类型的某个正整数,这在当前运行的所有进程中是唯一的。你不能说它大于或小于父 PID。
【解决方案2】:

是的。 PID 可以重复使用,并且在某些系统上,PID 不一定会单调增加。

【讨论】:

    【解决方案3】:

    是的,超过最大限制(取决于操作系统和可能的配置)后,PID 会被重复使用。因此,只要系统足够频繁地启动进程,这绝对是可能的。

    【讨论】:

    • 我的意思是不超过限制,就像我们在文件描述符中总是分配最少可用的描述符,而在进程 id 的情况下,我们总是得到一个大于生成它的进程的 id
    • @imdad:如果你的意思是不超过限制,我建议你更新你的问题这样说。
    猜你喜欢
    • 1970-01-01
    • 2022-11-13
    • 1970-01-01
    • 2012-09-14
    • 1970-01-01
    • 2014-12-06
    • 1970-01-01
    • 1970-01-01
    • 2013-08-11
    相关资源
    最近更新 更多