proc_nice

(PHP 5, PHP 7)

proc_nice現在のプロセスの優先度を変更する

説明

bool proc_nice ( int $increment )

proc_nice() は、現在のプロセスの優先度を increment で指定された値に変更します。 increment が正数の場合、 現在のプロセスの優先度をより低くし、increment が負数の場合は優先度が上がります。

proc_nice() は、proc_open() やそれに関連する関数とは関係ありません。

パラメータ

increment

The new priority value, the value of this may differ on platforms.

on Unix, a low value, such as -20 means high priority wheras a positive value have a lower priority.

For Windows the increment parameter have the following meanings:

Priority class Possible values
High priority increment < -9
Above normal priority increment < -4
Normal priority increment < 5 & increment > -5
Below normal priority increment > 5
Idle priority increment > 9

返り値

成功した場合に TRUE を、失敗した場合に FALSE を返します。 ユーザーが優先度を変更する権限を持っていないなど、 エラーが発生した場合は E_WARNING レベルのエラーも発行されます。

例1 Using proc_open() to set the process priority to high

<?php
// Highest priority
proc_nice(-20);
?>

変更履歴

バージョン 説明
7.2.0 この関数は、現在 Windows で利用可能です。

注意

注意: 可用性

proc_nice() は、使用しているシステムが 'nice' の機能を持っている場合のみ利用可能です。 'nice' は次のシステムに準拠しています: SVr4, SVID EXT, AT&T, X/OPEN, BSD 4.3 。

注意: Windows のみ

proc_nice() will change the current process priority, even if PHP was compiled using thread safety.

add a note add a note

User Contributed Notes 4 notes

up
6
kevin AT REMOVETHIS mrkmg.com
4 years ago
On a Linux system, running apache2 as a non-privileged user you can not increase the niceness of the process after decreasing it. Also, you can not use the apache_child_ terminate either. I found the following does work though:

<?php

//decrease niceness
proc_nice(19);

//kill child process to "reset" niceness
posix_kill( getmypid(), 28 );

?>
up
2
php at richardneill dot org
7 years ago
If a process is reniced, then all its children inherit that niceness. So a PHP script can call proc_nice on itself, then invoke system(), and the command executed via system() will also be niced.

Also worth making a note of ionice. There's no PHP function for this, but it's important. A nice'd program will happily try to chew up all i/o bandwidth with very little CPU usage, it can therefore make the entire computer non-responsive despite the programmer's intention.  Use "ionice -c3"  or see "man ionice"
up
2
Marek
6 years ago
Regarding ionice - on linux the impact of the ionice -c3 class is similar to that of nice, because the CPU "niceness" is taken into account when calculating the io niceness.
up
1
pandi at home dot pl
9 years ago
Simple function for check process nice, by default returns nice of current process:

<?php

public static function getProcessNice ($pid = null) {
    if (!
$pid) {
       
$pid = getmypid ();
    }
       
   
$res = `ps -p $pid -o "%p %n"`;
       
   
preg_match ('/^\s*\w+\s+\w+\s*(\d+)\s+(\d+)/m', $res, $matches);
       
    return array (
'pid' => (isset ($matches[1]) ? $matches[1] : null), 'nice' => (isset ($matches[2]) ? $matches[2] : null));
}

?>
To Top