Comment attendre qu'un processus se termine (et également attendre les processus enfants correspondants) en PHP?

StackOverflow https://stackoverflow.com/questions/8424961

  •  29-10-2019
  •  | 
  •  

Question

J'ai un programme qui s'exécute normalement jusqu'à ce qu'il se termine, mais dans certaines situations, il a créé deux procédés d'enfants, et le processus principal sort alors. Les processus d'enfants seront toujours en cours après le processus principal.

Je veux appeler ce programme en PHP.

À l'origine, j'ai utilisé la stratégie suivante (pas de code PHP valide),

$process=proc_open("python xxx.py");
while (1) {
   sleep(5);
   $status = proc_get_status($process);
   if (!$status['running']) {
       exit_loop;
   }
   if (timeout) {
      proc_terminate($process, 9);
      exit_loop;
   }
}

Mais ensuite, j'ai rapidement trouvé le bug que le processus a réellement quitté immédiatement que $ status [«exécution»] est faux, mais le processus d'enfants est toujours en cours d'exécution. Comment attendre réellement tous les processus d'enfants?

La deuxième question est que je n'ai pas examiné le proc_terminé, mais j'ai également observé que proc_terminate peut ne pas fonctionner comme je m'y attendais. Est-ce parce que le processus $ est un bash mais pas le véritable processus Python? Cela peut aussi parce que ce que j'ai terminé n'est que le processus principal des parents mais pas le processus des enfants.

Quelqu'un me conseille si le code ci-dessus est un code PHP robuste ou non? Y a-t-il une meilleure façon de gérer cela?

Merci.

======================

Plus d'informations,

  1. J'exécute ce programme dans Shell (CLI) et non lié aux fonctions CGI. Je n'aurai donc pas à m'inquiéter de max_execution_time.

  2. Je veux attendre les processus d'enfants créés par le processus principal ouvert par proc_open, je ne créerai qu'un seul processus dans le programme.

  3. Le programme Python que je veux appeler peut accrocher pendant très longtemps, donc je veux vérifier le délai d'attente et le terminer.

Pas de solution correcte

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top