Program execution 函数
在线手册:中文 英文
PHP手册

proc_nice

(PHP 5)

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 increment value of the priority change.

返回值

成功时返回 TRUE, 或者在失败时返回 FALSE. If an error occurs, like the user lacks permission to change the priority, an error of level E_WARNING is also generated.

注释

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. This means that proc_nice() is not available on Windows.


Program execution 函数
在线手册:中文 英文
PHP手册
PHP手册 - N: Change the priority of the current process

用户评论:

Marek (19-Jan-2011 04:40)

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.

php at richardneill dot org (24-Jun-2010 08:14)

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"

pandi at home dot pl (25-Nov-2008 01:22)

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));
}

?>

php at riggers dot me dot uk (13-Aug-2004 12:20)

Just an addition to the previous note re: exec('renice...'). The exit_func() will not set the priority back to normal (0) (at least on linux), unless the user that the webserver is running as is a super user (bad idea). You can decrease the priority of the running task, but not increase it again. See man page for renice.

To prevent subsequent requests running at the lower priority I called apache_child_terminate() on shutdown.

griph at dd dot chalmer dot se (10-Nov-2003 10:34)

If you don't have PHP5 and needs to nice your process this works good.

<?php

function proc_nice($priority) {
 
exec("renice +$priority ".getmypid());
}

//You also need a shutdown function if you don't want to leave your http deamons with a modified priority
function exit_func(){
 
// Restore priority
 
proc_nice(0);
}

register_shutdown_function('exit_func');
?>