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 則註釋

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 提到的函式也是如此)。
-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