pcntl_setpriority

(PHP 5, PHP 7, PHP 8)

pcntl_setpriority更改任何进程的优先级

描述

pcntl_setpriority(int $priority, ?int $process_id = null, int $mode = PRIO_PROCESS): bool

pcntl_setpriority() 设置 process_id 的优先级。

参数

priority

priority 通常是一个介于 -2020 之间的数值。默认优先级为 0,较低的数值表示更优的调度。由于优先级级别在系统类型和内核版本之间可能有所不同,请参阅您系统的 setpriority(2) 手册页以获取具体细节。

process_id

如果为 null,则使用当前进程的进程 ID。

mode

其中之一:PRIO_PGRPPRIO_USERPRIO_PROCESSPRIO_DARWIN_BGPRIO_DARWIN_THREAD

返回值

成功时返回 true,失败时返回 false

变更日志

版本 描述
8.0.0 process_id 现在可以为空。

参见

添加注释

用户贡献的注释 2 个注释

2
t dot stobbe at blackdogdev dot com
17 年前
关于 leandro dot pereira at gmail dot com 的 renice 函数,这并不正确。pcntl_setpriority() 不会设置进程的 nice 级别,而是设置其基础优先级。乍一看这似乎是同一件事,但在系统级别,它们实际上是完全不同的。

事实上,如果你想使用 pcntl_setpriority() 来优先处理你的进程(一个工具、一个守护进程或其他什么),我建议不要使用 setpriority,而是使用 renice。让系统管理优先级,你最终会得到你想要的结果。

这仅适用于基于 POSIX 的系统(leandro dot pereira at gmail dot com 提出的函数也是如此)。
-1
leandro dot pereira at gmail dot com
19 年前
以下代码段可以在旧版本的 PHP 中使用,以提供类似的功能。仅在 Linux 下测试。

<?php
function _pcntl_setpriority($priority, $pid = 0)
{
$priority = (int)$priority;
$pid = (int)$pid;

if (
$priority > 20 && $priority < -20) {
return
False;
}
if (
$pid == 0) {
$pid = getmypid();
}

return
system("renice $priority -p $pid") != false;
}

?>
To Top