【发布时间】:2015-02-16 16:29:43
【问题描述】:
CreateProcess 包含一个 PROCESS_INFORMATION 结构,该结构指定为创建的进程选择的进程 ID。
如何指定创建进程时使用哪个进程ID?
【问题讨论】:
-
你为什么需要那个?困惑。
CreateProcess 包含一个 PROCESS_INFORMATION 结构,该结构指定为创建的进程选择的进程 ID。
如何指定创建进程时使用哪个进程ID?
【问题讨论】:
您根本无法指定进程 ID。它由操作系统选择。
假设您可以指定一个进程 ID。操作系统必须锁定其内部进程列表结构,以便查找进程 ID 是否已经存在。如果没有,以防止创建具有相同 ID 的任何其他进程。这当然会增加内核的复杂性,而程序员并没有真正受益。
在不指定进程 ID 的情况下,操作系统可以原子地增加一个计数器来确定下一个进程 ID,这样更容易更快。
【讨论】:
在 CreateProcess 函数中,PROCESS_INFORMATION 不是输入参数。它是函数的输出参数。因此,无论您尝试分配什么进程 ID,该参数都将被内核覆盖。 查看https://msdn.microsoft.com/en-us/library/windows/desktop/ms682512(v=vs.85).aspx中的示例用法。
【讨论】: