proc_nice

(PHP 5, PHP 7)

proc_niceChange the priority of the current process

설명

bool proc_nice ( int $increment )

proc_nice() changes the priority of the current process by the amount specified in increment. A positive increment will lower the priority of the current process, whereas a negative increment will raise the priority.

proc_nice() is not related to proc_open() and its associated functions in any way.

인수

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
Realtime priority increment < -14
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를 반환합니다. If an error occurs, like the user lacks permission to change the priority, an error of level E_WARNING is also generated.

예제

Example #1 Using proc_open() to set the process priority to high

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

변경점

버전 설명
7.2.0 This function is now available on Windows.

주의

Note: Availability

proc_nice() will only exist if your system has 'nice' capabilities. 'nice' conforms to: SVr4, SVID EXT, AT&T, X/OPEN, BSD 4.3.

Note: Windows only

The values of increment tries to mimic the output of the wmic.

On Windows this function will only change the current process priority, even if PHP was compiled using thread safety.

add a note add a note

User Contributed Notes 5 notes

up
7
kevin AT REMOVETHIS mrkmg.com
10 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
3
php at richardneill dot org
13 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
13 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
0
phil_php at zieaon dot com
2 years ago
It is important to note that this is a relative change. I didn't read the description properly and couldn't figure out why setting proc_nice(0) didn't take the forked children back to 0!
For example if you run:
<?php
proc_nice
(-5);
proc_nice(0); // will have no effect
proc_nice(5); // will take the niceness back to 0

?>

In PHP CLI under Debian (and probably many other Linux flavours) you can read the 'niceness' from the proc filesystem.  (There may be a PHP command that gives this info but there doesn't seem to be a link to it on this page.)
E.g
<?php
$Current_Niceness_Value
= intval(explode(" ",file_get_contents("/proc/".getmypid()."/stat"))[18]);

// Note: Older versions of Linux return an unsigned integer which has to be converted to a signed integer.
$Current_Niceness_Value = unpack("l",pack("L",intval(explode(" ",file_get_contents("/proc/".getmypid()."/stat"))[18])))[1];

?>
up
-1
pandi at home dot pl
15 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