CakeFest 2024: The Official CakePHP Conference

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 は一般的には -20 から 20 までの値です。 デフォルトの優先度は 0 で、数字が小さいほど 優先順位が上となります。システムの型やカーネルの バージョンによって優先度の扱いは違うので、詳細についてはシステムの setpriority(2) の man ページを参照ください。

process_id

null だった場合は、現在のプロセスの プロセスID を使用します。

mode

PRIO_PGRPPRIO_USERPRIO_PROCESSPRIO_DARWIN_BGPRIO_DARWIN_THREAD のいずれか。

戻り値

成功した場合に true を、失敗した場合に false を返します。

変更履歴

バージョン 説明
8.0.0 process_id は、nullable になりました。

参考

add a note

User Contributed Notes 2 notes

up
2
t dot stobbe at blackdogdev dot com
17 years ago
As for the renice function by leandro dot pereira at gmail dot com, this isn't true. pcntl_setpriority() doesn't set the nice level of a process, but instead sets the base priority of it. At first glance this might seem like the same thing, but on a system level, they are actually quite different.

In fact, if you're looking to use pcntl_setpriority() to prioritize your process (a tool or a daemon or what-not), I wouldn't recomend using setpriority at all, but renice it instead. Let the system manage priorities and you'll end up with the results you were looking for.

This applies only to POSIX based systems only (as does the function presented by leandro dot pereira at gmail dot com as well).
up
-1
leandro dot pereira at gmail dot com
19 years ago
The following snippet may be used under older versions of PHP to provide similar functionality. Tested only under 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