【问题标题】:About the pid of the process关于进程的pid
【发布时间】:2010-10-23 19:04:33
【问题描述】:

我有一个有点傻的问题,如果我创建了一系列进程......这些不一定是某种继承,进程的 pid 必须是数字连续或随机 pid?

【问题讨论】:

  • 在linux中,不知道他们也依赖于操作系统..

标签: linux process pid


【解决方案1】:

在 AIX 上,您经常会看到更大(例如 7 位)的 PI​​D,它们不一定是半顺序分配的(尽管我在测试时似乎以 2 为增量循环;机器上有另一个用户,所以可能意义不大)。

在 AIX 5.3 机器上全新登录:

$ ps
     PID    TTY  TIME CMD
 1060910 pts/27  0:00 -ksh
 1155224 pts/27  0:00 ps
$

【讨论】:

    【解决方案2】:

    以下是测试系统功能的方法:

    for i in $(seq 20); do ps; done | grep ps
    

    “ps”命令的 PID 是连续的进程,或者与任何其他调用者合理预期能够产生的接近连续的进程一样。

    我在 Windows 上的 cygwin 终端随机分配它们,我的网络主机按顺序分配它们(偶尔会有间隙,可能是其他用户或服务器运行的进程)。

    有些人认为顺序 PID 分配可能是一个轻微的安全问题,因为它可能会在多用户系统的用户之间泄露信息。

    【讨论】:

    • 更好的方法是为 i in seq 20;做 sh -c 'echo $$';在 'ps' 的输出中对 'ps' 进行 Grepping 可能会在结果中产生一些噪音(例如,同时运行 ps 的其他用户...)
    • 当然,我只是想从命令行进行快速的开发人员测试。如果你写了一个脚本或其他依赖于输出的东西,那就另当别论了。
    【解决方案3】:

    如果您正在创建那些孩子,您会知道 pid,pid 取决于操作系统调度程序,您不必关心这些东西。

    【讨论】:

      【解决方案4】:

      在 Linux 上,pid 通常在系统范围内按顺序分配,但它们会定期回绕,并且可能存在由其他不相关进程引起的“间隙”。在极端情况下,您可能有足够宽的“间隙”来导致这种环绕。所以不要假设任何特定的顺序 - 而是明确地跟踪您的父或子进程的 PID。

      【讨论】:

      • 我正在用 C 语言做一个程序,使用信号量模拟创建和释放过程,然后我不知道是否分配一个 PID 随机过程或是否每个分配一个值中的连续数字,我希望模拟尽可能类似于linux中的清除过程
      • 如果您要进行模拟,从模糊测试的角度来看,最好的方法是使用多种方法(随机、顺序、几乎顺序)并尝试使用每种方法进行测试。跨度>
      【解决方案5】:

      这由操作系统决定。

      通常,它们通常由操作系统按顺序分配。但是,这种行为不是决策的依据,因为大多数操作系统规范都声明进程 ID 分配不是确定性的(即:它可能是随机的,并且可能在未来的版本中发生变化等)。

      【讨论】:

        【解决方案6】:

        从您的角度来看,它们将是随机的。系统管理这些编号并在创建流程时分配它们。快速浏览一下我系统上当前的 PID,发现它们都可以被 4 整除...

        【讨论】:

        • 我正在用 C 语言做一个程序,使用信号量模拟创建和释放过程,然后我不知道是否分配一个 PID 随机过程或是否每个分配一个值中的连续数字,我希望模拟尽可能类似于linux中的清除过程
        【解决方案7】:

        取决于你的平台,但你不应该依赖于你的 pid 的任何特定顺序。

        在 Windows 上,pid 通常分配的数量越来越多,但是当进程退出时,pid 可以被回收,您会看到新进程的 pid 低于旧进程的情况。此外,pid 与 tid 来自同一个命名空间,因此当您启动新进程时,您不会看到 pid 增加 4。

        【讨论】:

          猜你喜欢
          • 2023-04-02
          • 2017-09-09
          • 1970-01-01
          • 1970-01-01
          • 2016-05-11
          • 1970-01-01
          • 2021-08-08
          • 2016-01-31
          相关资源
          最近更新 更多