假设您有一个Windows进程A,其优先级为AboveNormal,它启动另一个进程B,但没有指定优先级。 进程B的优先级是否从进程A的优先级inheritance? 那么,过程B的优先级是什么? AboveNormal,Normal或其他?
如果未指定,则在某些情况下,优先级类将被继承。
它发生在调用进程在IDLE_PRIORITY_CLASS或BELOW_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进程中,优先级不会被继承。