进程优先级是否被inheritance?

假设您有一个Windows进程A,其优先级为AboveNormal,它启动另一个进程B,但没有指定优先级。 进程B的优先级是否从进程A的优先级inheritance? 那么,过程B的优先级是什么? AboveNormal,Normal或其他?

如果未指定,则在某些情况下,优先级类将继承。

它发生在调用进程在IDLE_PRIORITY_CLASSBELOW_NORMAL_PRIORITY类中时。 否则,它将获得NORMAL_PRIORITY_CLASS,除非在CreateProcess调用期间指定。

MSDN在CreateProcess的dwCreationFlags上说:

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

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

从CreateProcess的文档:

dwCreationFlags [in]

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

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

所以,在你的例子中,新的进程将具有正常的优先级。

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