Invoquer script shell externe de PHP et obtenir son identifiant de processus
-
16-09-2019 - |
Question
Comment puis-je appeler un script shell externe (ou encore un script PHP externe) de PHP lui-même et obtenir son numéro d'identification de processus dans le même script?
La solution
$command = 'yourcommand' . ' > /dev/null 2>&1 & echo $!; ';
$pid = exec($command, $output);
var_dump($pid);
Autres conseils
Si vous voulez faire strictement l'utilisation des outils PHP vous donne, plutôt que Unix spécifiques wizardry , vous pouvez faire donc avec proc_open
et proc_get_status
, bien que la nécessité de passer une spécification de descripteur dans proc_open
fait désagréablement bavard à utiliser:
<?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;
À une solution multi-plateforme, consultez symfony / processus .
use Symfony\Component\Process\Process;
$process = new Process('sleep 100');
$process->start();
var_dump($process->getPid());
, vous devrez peut-être mettre à jour les informations autoloading Après avoir installé symfony/process
avec le compositeur (composer require symfony/process
) avec composer dump-autoload
puis exiger la autoload avec require __DIR__ . '/vendor/autoload.php';
.
Notez également que vous pouvez obtenir PID d'un en cours d'exécution processus uniquement. Reportez-vous à la documentation pour plus de détails de l'API.