[Tableaux] proc_close en php4
Bonjour,
Je fonctionne avec php 4.3
Je lance un processus avec proc_open :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
| $descriptorspec = array(
0 => array("pipe", "r"), // // stdin est un pipe où le processus va lire
1 => array("pipe", "w"), // stdout est un pipe où le processus va écrire
2 => array("pipe", "w")
);
$cwd = '/tmp';
echo "\non lance commande : $cmd \n";
$process1 = proc_open($cmd.' &', $descriptorspec, $pipes);
if (is_resource($process1)) {
$stdin = $pipes[0];
$stdout = $pipes[1];
$stderr = $pipes[2];
$outw=false;
while (! feof($stderr) || ! feof($stdout))
{
if(! feof($stderr)){
echo "Erreur :".fgets($stderr);
echo "\n";
echo "On sort\n";
$outw=true;
}
if(! feof($stdout)){
/*echo "sortie :".fgets($stdout);
echo "\n";*/
;
}
if($outw)
break;
}/**/
echo "Fermeture de stdin...";
fclose($pipes[0]);
echo "OK\nFermeture de stdout...";
fclose($pipes[1]);
echo "OK\nFermeture de stderr...";
fclose($pipes[2]);
echo "OK\n";
echo "Fermeture du processus $status...";
$exit_code = proc_close($process1);
echo "OK\ncode de sortie : ".$exit_code."\n"; |
Ce code est censé stoper l'execution d'un processus dès qu'on lit quelque chose sur la sortie des erreurs.
Mon problème c'est que si je lance
proc_open($cmd,..;
Sans le '&'
Les fclose fonctionne mais le proc_close reste bloquée jusqu'a ce que l'application finissent.
Avec le '&'
Les fclose sont ok, on passe dans le pclose le script php fini , mais problème je fais un ps et je vois toujours la commande tourner en arrière plan!
Pour m'en sortir je vais faire un trux salle en lancant un
ps -aux | grep $cmd
puis parser le résultat pour récupérer le pid puis le killer avant de finir le script mais je préfèrerai une solution plus propre.