PHP Conference Japan 2024

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 现在可以为 null。

参见

添加注释

用户贡献的注释 2 条注释

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

事实上,如果您想使用 pcntl_setpriority() 来优先处理您的进程(一个工具或守护进程等等),我不建议使用 setpriority,而是使用 renice。让系统管理优先级,您最终将获得您想要的结果。

这仅适用于基于 POSIX 的系统(leandro dot pereira at gmail dot com 提出的函数也适用)。
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