3
  1. Windows 中的 PID 分配策略是什么?重复运行调用 _getpid() 的进程表示非顺序分配 (3548,3344,3628,2748,4872,2360)。

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

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

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

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

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

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

4

2 回答 2

3

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

于 2009-06-15T15:15:10.317 回答
1

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

于 2009-06-15T15:27:49.460 回答