PHP
downloads | documentation | faq | getting help | mailing lists | reporting bugs | php.net sites | links | conferences | my php.net

search for in the

proc_nice> <proc_close
Last updated: Fri, 01 Aug 2008

view this page in

proc_get_status

(PHP 5)

proc_get_statusObtiene información sobre un proceso abierto por proc_open()

Descripción

array proc_get_status ( resource $proceso )

proc_get_status() recupera información sobre un proceso abierto mediante el uso de proc_open().

Lista de parámetros

proceso

El resource proc_open() que será evaluado.

Valores retornados

Un valor array con la información recolectada en caso de éxito, y FALSE si ocurre un error. La matriz devuelta contiene los siguientes elementos:

elementotipodescripción
command string La cadena del comando que fue pasada a proc_open().
pid int id del proceso
running bool TRUE si el proceso aun está siendo ejecutado, FALSE si ha terminado.
signaled bool TRUE si el proceso hijo ha sido terminado por una señal no atrapada. En windows, este valor siempre es FALSE.
stopped bool TRUE si el proceso hijo fue detenido por una señal. En windows, este valor siempre es FALSE.
exitcode int El código de salida devuelto por el proceso (el cual tiene sentido únicamente si running es FALSE). Solo la primera llamada a esta función devuelve el valor real, la siguiente llamada devuelve -1.
termsig int El número de la señal que causó que el proceso hijo finalizara su ejecución (sólo tiene sentido si signaled es TRUE).
stopsig int El número de la señal que causó que el proceso hijo detuviera su ejecución (sólo tiene sentido si stopped es TRUE).

Ver también



proc_nice> <proc_close
Last updated: Fri, 01 Aug 2008
 
add a note add a note User Contributed Notes
proc_get_status
webmaster at rouen dot fr
09-Jul-2008 10:49
The following function takes an array of shell commands and executes them. It is able to execute up to $nb_max_process at the same time. As soon as one process is terminated, another one is executed. Quite useful if you want to batch process commands on a multi-processor or multi-core environment.

The example below tries to convert to PNG a list of SVG files submitted on the command line (using Inkscape).

(it's quick and dirty but works very well for me)

#!/usr/bin/php
<?php
function pool_execute($commandes,$nb_max_process) {
 
$pool=array();
  for(
$i=0;$i<$nb_max_process;$i++) {
   
$pool[$i]=FALSE;
  }

  while(
count($commandes)>0) {
   
$commande=array_shift($commandes);

   
$commande_lancee=FALSE;
    while(
$commande_lancee==FALSE) {
     
usleep(50000);

      for(
$i=0;$i<$nb_max_process and $commande_lancee==FALSE;$i++) {
        if(
$pool[$i]===FALSE) {
         
$pool[$i]=proc_open($commande,array(),$foo);
         
$commande_lancee=TRUE;
        } else {
         
$etat=proc_get_status($pool[$i]);
          if(
$etat['running']==FALSE) {
           
proc_close($pool[$i]);
           
$pool[$i]=proc_open($commande,array(),$foo);
           
$commande_lancee=TRUE;
          }
        }
      }
    }
  }
}

$fichiers=$argv;
array_shift($fichiers);
$commandes=array();
foreach(
$fichiers as $fichier) {
 
$entree=$fichier;
 
$sortie=basename($fichier,'.svg').".png";
 
$commandes[]='inkscape --file='.escapeshellarg($entree).' --export-area-canvas --export-png='.escapeshellarg($sortie);
}

pool_execute($commandes,4);
strrev xc.noxeh@ellij
05-Jun-2008 10:12
You can NOT rely on pid+1.
You could prefix exec to the command string, this will replace the /bin/sh script with the real thing you want to exec (use only if you don't do 'scary things' like pipes, output redirection, multiple commands, however if you know how they work, go ahead).
If you prefix exec, the /bin/sh process will only start your process, and the PID will be the same.
damien at cyg dot net
13-Jun-2007 03:06
Alternatively, if you're calling a subsequent php script using proc_open, you can have that process echo its own actual PID in the output.
Also, if you go through the /proc filesystem on linux, you can read through /proc/12345 where 12345 is the pid returned by proc_get_status (the pid of the /bin/sh instance) and it will list its child processes within.
andy dot shellam at mailnetwork dot co dot uk
05-Apr-2007 02:16
Further to my previous note, I've found out the PID returned is the PID of the shell (/bin/sh) that then runs the actual command requested.

I've raised this as bug #41003.
andy dot shellam at mailnetwork dot co dot uk
05-Apr-2007 01:58
To the poster above, same here on FreeBSD 6.1, PHP 5.2.1.

To get the correct PID to use for posix_kill I have to add 1 to the PID returned from proc_get_status.

proc_nice> <proc_close
Last updated: Fri, 01 Aug 2008
 
 
show source | credits | stats | sitemap | contact | advertising | mirror sites