2010-12-11 25 views
1

J'ai un script php qui déclenche trois commandes exec() et obtient leurs pids respectifs.Ne pas sortir d'une boucle while do qui contient un exec()

Je voudrais attendre que les trois commandes exec cessent de s'exécuter avant de passer au lot suivant de trois.

J'ai essayé de vérifier chaque pid dans une boucle while do, mais cela ne semble jamais sortir de la boucle: il reste juste là jusqu'à ce que le script arrive à expiration.

Voici une version simplifiée de ce que j'ai essayé:

do { 
$pid = 722; 
print "checking"; 
exec("ps -p $pid", $output); 
$count = count($output); 
} while ($count >= 2); 

print "out of do while"; 

Est-ce que quelqu'un a des idées sur ce qui pourrait l'amener à ne jamais sortir de la boucle?

Répondre

5

L'exécution de l'execs de PSP ne cesse que d'être ajoutée au tableau, de sorte que le nombre ne cesse d'augmenter. Pour remplacer le tableau de sortie, appelez unset($output) avant d'appeler exec. Pour plus de détails, veuillez consulter le .

+0

Votre diamant absolu. Ça marche. Merci. – user489176

0

Si l'argument de sortie est présent, alors le tableau sera rempli de chaque ligne de sortie de la commande. Les espaces de fin, par exemple , ne sont pas inclus dans ce tableau. Notez que si le tableau déjà contient des éléments, exec() ajoutera à la fin du tableau. Si vous ne voulez pas que la fonction ajoute des éléments , appelez unset() sur le tableau avant de le passer à exec().

De exec() manual.