proc_nice

(PHP 5, PHP 7, PHP 8)

proc_niceModifica la prioridad de ejecución del proceso actual

Descripción

proc_nice(int $priority): bool

proc_nice() modifica la prioridad del proceso actual mediante el argumento especificado priority. Un argumento priority positivo reducirá la prioridad del proceso actual, mientras que un valor negativo priority aumentará la prioridad.

proc_nice() no está relacionado con proc_open() ni con sus funciones asociadas de ninguna manera.

Parámetros

priority

El nuevo valor de prioridad, este valor puede variar según la plataforma.

En Unix, un valor bajo, como -20 indica una prioridad alta, mientras que un valor positivo indica una prioridad baja.

Para Windows, el argumento priority tiene las siguientes significaciones:

Clase de prioridad Valores posibles
Prioridad alta priority < -9
Por encima de la prioridad normal priority < -4
Prioridad normal priority < 5 & priority > -5
Por debajo de la prioridad normal priority > 5
Prioridad inactiva priority > 9

Valores devueltos

Devuelve true en caso de éxito o false en caso de error. Si ocurre un error, por ejemplo, si el usuario que intenta cambiar la prioridad de un proceso no tiene suficientes permisos para hacerlo, se genera un error de nivel E_WARNING y se devuelve false.

Historial de cambios

Versión Descripción
7.2.0 Esta función está ahora disponible en Windows.

Ejemplos

Ejemplo #1 Uso de proc_nice() para establecer una prioridad de proceso alta

<?php
// Prioridad más alta
proc_nice(-20);
?>

Notas

Nota: Disponibilidad

proc_nice() solo está disponible en sistemas que disponen de capacidades NICE. NICE es compatible con: SVr4, SVID EXT, AT&T, X/OPEN, BSD 4.3.

Nota: Solo Windows

proc_nice() cambiará la prioridad del proceso actual incluso si PHP ha sido compilado utilizando la seguridad de hilos.

Ver también

add a note

User Contributed Notes 5 notes

up
7
kevin AT REMOVETHIS mrkmg.com
12 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
14 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
4 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
16 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