2009-09-24 15 views

Respuesta

33
$command = 'yourcommand' . ' > /dev/null 2>&1 & echo $!; '; 

$pid = exec($command, $output); 

var_dump($pid); 
+0

¿Cuál es el significado de ">/dev/null 2> & 1 & echo $ !;" – andho

+0

significa 'enviar toda la salida al dispositivo nulo, lo que significa que toda la salida estará disponible en stdout y echo ps simplemente echo el pid, que es capturado por el script –

+0

Esto también significa que el comando se ejecutará en segundo plano (que sería lo que desea si quiere el pid), y así su script php no esperará a que el comando termine ejecutando – Tofandel

11

Si quieres hacer esto herramientas estrictamente el uso de PHP le da, en lugar de Unix-specific wizardry, puede hacerlo con proc_open y proc_get_status, a pesar de la necesidad de aprobar una especificación descriptor en proc_open hace que sea desagradable verbosa de empleo:

<?php 

$descriptorspec = [ 
    0 => ['pipe', 'r'], 
    1 => ['pipe', 'w'], 
    2 => ['pipe', 'w'] 
]; 
$proc = proc_open('yourcommand', $descriptorspec, $pipes); 
$proc_details = proc_get_status($proc); 
$pid = $proc_details['pid']; 

echo $pid; 
+0

Esta debería ser la respuesta aceptada. –

0

Para una solución de plataforma cruzada, visita symfony/process.

use Symfony\Component\Process\Process; 
$process = new Process('sleep 100'); 
$process->start(); 
var_dump($process->getPid()); 

Después de instalar symfony/process con el compositor (composer require symfony/process), puede que tenga que actualizar la información de carga automática con composer dump-autoload y luego requerir la carga automática con require __DIR__ . '/vendor/autoload.php';.

Observe también que puede obtener un PID de ejecutando el proceso solamente. Consulte the documentation para obtener detalles de la API.

Cuestiones relacionadas