proc_nice

(PHP 5, PHP 7, PHP 8)

proc_nice — Ändert die PrioritĂ€t des aktuellen Prozesses

Beschreibung

function proc_nice(int $priority): bool

proc_nice() Àndert die PrioritÀt des aktuellen Prozesses um den in priority angegebenen Betrag. Ein positives priority vermindert die PrioritÀt des aktuellen Prozesses, wÀhrend ein negatives priority die PrioritÀt erhöht.

proc_nice() ist in keiner Weise verwandt mit proc_open() und der dazugehörigen Funktionen.

Parameter-Liste

priority

Der neue PrioritÀtswert; dieser Wert ist plattformabhÀngig.

Unter Unix bedeutet ein niedriger Wert, wie beispielsweise -20, eine hohe PrioritÀt, wohingegen ein positiver Wert eine niedrigere PrioritÀt hat.

Unter Windows hat der Parameter priority die folgende Bedeutung:

PrioritÀtsklasse Mögliche Werte
Hoch priority < -9
Höher als normal priority < -4
Normal priority < 5 & priority > -5
Niedriger als normal priority > 5
Leerlauf (Idle) priority > 9

RĂŒckgabewerte

Gibt bei Erfolg true zurĂŒck. Bei einem Fehler wird false zurĂŒckgegeben. Wenn ein Fehler auftritt, zum Beispiel weil der User keine Berechtigung hat, die PrioritĂ€t eines Prozesses zu Ă€ndern, wird ein Fehler der Stufe E_WARNING erzeugt.

Changelog

Version Beschreibung
7.2.0 Diese Funktion steht nun unter Windows zur VerfĂŒgung.

Beispiele

Beispiel #1 Verwendung von proc_nice(), um die ProzessprioritÀt auf hoch zu setzen

<?php
// höchste PrioritÀt
proc_nice(-20);
?>

Anmerkungen

Hinweis: VerfĂŒgbarkeit

proc_nice() existiert nur, wenn Ihr System mit 'nice' umgehen kann. 'nice' ist verfĂŒgbar unter: SVr4, SVID EXT, AT&T, X/OPEN und BSD 4.3.

Hinweis: Nur fĂŒr Windows

proc_nice() Àndert die aktuelle ProzessprioritÀt, selbst wenn PHP mit Threadsicherheit kompiliert wurde.

Siehe auch

add a note

User Contributed Notes 5 notes

up
7
kevin AT REMOVETHIS mrkmg.com ¶
13 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 ¶
15 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 ¶
15 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 ¶
5 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
0
pandi at home dot pl ¶
17 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));
}

?>