Bonjour,

Je fonctionne avec php 4.3

Je lance un processus avec proc_open :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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.