【问题标题】:PID assignment policy in Windows / Using PIDs for naming temporary filesWindows 中的 PID 分配策略 / 使用 PID 命名临时文件
【发布时间】:2009-06-15 15:08:15
【问题描述】:
  1. Windows 中的 PID 分配策略是什么?调用 _getpid() 的进程重复运行表示非顺序分配(3548,3344,3628,2748,4872,2360)。

  2. 鉴于观察到的 PID 的非顺序分配,两个具有相同 pid 的不同进程是否可以在时间上彼此接近执行?显然这些进程不会同时运行。

  3. 在临时文件的命名中使用 PID 是不是特别不明智?

我正在编写一个程序,它通过生成所需的输入文件、调用可执行文件并从所述可执行文件读取生成的输出文件来与另一个可执行文件交互。在 CLEAN 终止后,中间文件将被删除。

我担心的是,如果没有清理临时文件并且重复使用 PID,则未清理的旧临时文件和新文件之间可能会出现歧义。如果可执行文件由于错误而没有生成新的输出文件,则旧文件可能看起来像新创建的文件,因此可能无法捕获错误。

还有其他方法可以增加稳健性,例如对临时文件使用 GUID、仅对临时文件使用干净的目录或验证没有与目标输出文件同名的文件。应该采用其中一些技术,因为 PID 肯定会在机器重新启动或机器运行足够长的时间时重复。

这个问题主要源于我对为什么 Windows 以不同于 *nix 的方式分配 PID 的好奇心。

【问题讨论】:

    标签: guid temporary-files pid


    【解决方案1】:

    进程 ID 和线程 ID 来自 Windows 上的同一个池。系统将立即重用线程和进程 ID。

    【讨论】:

    • 你有这个声明的来源吗?恕我直言,Windows 将重用进程和线程内核对象,但为它们分配新编号。否则,为什么我的 PID 会有 4 到 124 的差距?
    【解决方案2】:

    以这种方式使用 PID 是有问题的。我见过在命名文件时将 PID 与当前 UTC 时间结合使用的程序,因此您最终会得到名为 foo_55145_4a3667d3.log 的文件。另一个选项使用dwFlagsAndAttributes 参数到CreateFile() 中的FILE_ATTRIBUTE_TEMPORARYFILE_FLAG_DELETE_ON_CLOSE 选项。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-12-12
      • 2013-09-25
      • 2017-03-15
      • 1970-01-01
      • 1970-01-01
      • 2021-02-10
      • 1970-01-01
      相关资源
      最近更新 更多