进程优先级是继承的吗?

发布于 2024-07-14 19:57:13 字数 113 浏览 12 评论 0原文

想象一下,您有一个以高于正常优先级运行的 Windows 进程 A,它启动了另一个进程 B,但没有指定优先级。 进程B的优先级是继承进程A的优先级吗? 那么,进程B的优先级是什么? 高于正常、正常还是其他?

Imagine that you have a Windows process A running with priority AboveNormal that starts another process B without specify the priority. Is the priority of the process B inherited from the priority of the process A? So, what will be the priority on the process B? AboveNormal, Normal, or another?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

蓝眸 2024-07-21 19:57:13

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

当调用进程属于 IDLE_PRIORITY_CLASSBELOW_NORMAL_PRIORITY 类时,会发生这种情况。 否则,除非在 CreateProcess 调用期间指定,否则它将获得 NORMAL_PRIORITY_CLASS

MSDN 在 CreateProcess 的 dwCreationFlags 上说:

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

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

If not specified, the priority class is inherited, in some cases.

It occurs when the calling process is in the IDLE_PRIORITY_CLASS or BELOW_NORMAL_PRIORITY class. Otherwise, it gets NORMAL_PRIORITY_CLASS unless specified during the CreateProcess call.

MSDN says on dwCreationFlags of CreateProcess:

This parameter also controls the new process's priority class, which
is used to determine the scheduling priorities of the process's
threads. For a list of values, see GetPriorityClass. If none of the
priority class flags is specified, the priority class defaults to
NORMAL_PRIORITY_CLASS unless the priority class of the creating
process is IDLE_PRIORITY_CLASS or BELOW_NORMAL_PRIORITY_CLASS. In this
case, the child process receives the default priority class of the
calling process.

The answer is therefore NORMAL priority class. Basically anything that is above normal doesn't get passed to the child.

不即不离 2024-07-21 19:57:13

来自 CreateProcess 的文档:

dwCreationFlags [in]

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

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

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

From the documentation for CreateProcess:

dwCreationFlags [in]

The flags that control the priority class and the creation of the process. For a list of values, see Process Creation Flags.

This parameter also controls the new process's priority class, which is used to determine the scheduling priorities of the process's threads. For a list of values, see GetPriorityClass. If none of the priority class flags is specified, the priority class defaults to NORMAL_PRIORITY_CLASS unless the priority class of the creating process is IDLE_PRIORITY_CLASS or BELOW_NORMAL_PRIORITY_CLASS. In this case, the child process receives the default priority class of the calling process.

So, in your example, the new process would have normal priority.

风情万种。 2024-07-21 19:57:13

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

In Windows process priority is not inherited.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文