假设您有一个运行优先级为AboveNormal的Windows进程A,它启动另一个进程B而不指定优先级。进程B的优先级是否继承了进程A的优先级?那么,流程B的优先级是什么? AboveNormal,Normal还是其他?
答案 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进程中,不会继承优先级。