【发布时间】:2010-10-11 19:07:57
【问题描述】:
假设您有一个 Windows 进程 A 以 AboveNormal 的优先级运行,它启动另一个进程 B 而没有指定优先级。进程 B 的优先级是否继承自进程 A 的优先级?那么,进程 B 的优先级是什么?高于正常、正常还是其他?
【问题讨论】:
标签: windows inheritance process windows-task-scheduler
假设您有一个 Windows 进程 A 以 AboveNormal 的优先级运行,它启动另一个进程 B 而没有指定优先级。进程 B 的优先级是否继承自进程 A 的优先级?那么,进程 B 的优先级是什么?高于正常、正常还是其他?
【问题讨论】:
标签: windows inheritance process windows-task-scheduler
如果未指定,则在某些情况下,优先级是继承的。
当调用进程在 IDLE_PRIORITY_CLASS 或 BELOW_NORMAL_PRIORITY 类时发生。否则,除非在 CreateProcess 调用期间指定,否则它将获得 NORMAL_PRIORITY_CLASS。
MSDN 在 CreateProcess 的 dwCreationFlags 上说:
此参数还控制新进程的优先级,即 用于确定进程的调度优先级 线程。有关值的列表,请参阅 GetPriorityClass。如果没有 指定优先级标志,优先级默认为 NORMAL_PRIORITY_CLASS 除非创建的优先级类 进程是 IDLE_PRIORITY_CLASS 或 BELOW_NORMAL_PRIORITY_CLASS。在这个 在这种情况下,子进程接收到的默认优先级类 调用进程。
因此,答案是 NORMAL 优先级。基本上任何高于正常值的东西都不会传递给孩子。
【讨论】:
在 Windows 中进程优先级不被继承。
【讨论】:
来自CreateProcess 的文档:
dwCreationFlags [in]
控制优先级和进程创建的标志。有关值的列表,请参阅进程创建标志。
该参数还控制新进程的优先级,用于确定进程线程的调度优先级。有关值的列表,请参阅 GetPriorityClass。如果没有指定优先级类标志,则优先级类默认为 NORMAL_PRIORITY_CLASS,除非创建进程的优先级类是 IDLE_PRIORITY_CLASS 或 BELOW_NORMAL_PRIORITY_CLASS。在这种情况下,子进程接收调用进程的默认优先级。
因此,在您的示例中,新进程将具有正常优先级。
【讨论】: