流程优先级是继承的吗?

时间:2009-03-06 16:46:32

标签: windows inheritance process windows-scheduler

假设您有一个运行优先级为AboveNormal的Windows进程A,它启动另一个进程B而不指定优先级。进程B的优先级是否继承了进程A的优先级?那么,流程B的优先级是什么? AboveNormal,Normal还是其他?

3 个答案:

答案 0 :(得分:6)

如果未指定,则在某些个案例中继承优先级

当调用进程位于 IDLE_PRIORITY_CLASS BELOW_NORMAL_PRIORITY 类时,会发生此错误。否则,除非在CreateProcess调用期间指定,否则它将获得 NORMAL_PRIORITY_CLASS

MSDN在CreateProcess的dwCreationFlags上说:

  

此参数还控制新进程的优先级等级   用于确定进程的调度优先级   线程。有关值列表,请参阅GetPriorityClass。如果没有   指定优先级标志,优先级类默认为   NORMAL_PRIORITY_CLASS除非创建优先级   进程是IDLE_PRIORITY_CLASS或BELOW_NORMAL_PRIORITY_CLASS。在这   case,子进程接收默认优先级   呼叫过程。

因此,答案是普通优先级。基本上任何高于正常水平的东西都不会传递给孩子。

答案 1 :(得分:0)

来自CreateProcess的文档:

dwCreationFlags [in]

    控制优先级和创建进程的标志。有关值列表,请参阅Process Creation Flags。

    此参数还控制新进程的优先级类,该优先级用于确定进程线程的调度优先级。有关值列表,请参阅GetPriorityClass。如果未指定任何优先级类别标志,则优先级类默认为NORMAL_PRIORITY_CLASS,除非创建进程的优先级类别为IDLE_PRIORITY_CLASS或BELOW_NORMAL_PRIORITY_CLASS。在这种情况下,子进程接收调用进程的默认优先级。

因此,在您的示例中,新进程将具有正常的优先级。

答案 2 :(得分:-1)

在Windows进程中,不会继承优先级。