7
votes

PHP sur une machine Windows; Démarrer le processus en arrière-plan

Je cherche le meilleur, ou de quelque manière que ce soit pour créer un processus de PHP en arrière-plan afin que je puisse le tuer plus tard dans le script.

En ce moment, j'utilise: shell_exec ($ commande) ; Le problème avec ceci est qu'il attend que le programme se ferme.

Je veux quelque chose qui aura le même effet que le NOHUP lorsque j'exécute la commande shell. Cela me permettra d'exécuter le processus en arrière-plan, de sorte que plus tard dans le script, il peut être fermé. J'ai besoin de le fermer car ce script fonctionnera régulièrement et le programme ne peut pas être ouvert lorsque cela fonctionne.

J'ai pensé à générer un fichier .bat pour exécuter la commande en arrière-plan , mais même alors, comment puis-je tuer le processus plus tard?

Le code que j'ai vu pour Linux est le suivant: xxx

edit < / strong>: s'avère que je n'ai pas besoin de tuer le processus


1 commentaires

Alors, quelle était la solution?


5 Réponses :


1
votes

du manuel PHP pour EXEC :

Si un programme est démarré avec cette fonction, afin de continuer à fonctionner en arrière-plan, la sortie du programme doit être redirigée vers un fichier ou un autre flux de sortie. Omet de le faire entraînera une accroche de PHP jusqu'à la fin de l'exécution du programme.

Ie tuyau La sortie dans un fichier et PHP n'attendront pas: xxx

de la mémoire, je crois qu'il y a un caractère de contrôle que vous Peut préparer (comme vous le ferez avec @) à la famille EXEC la famille de commandes empêchant également l'exécution de la pause - Vous ne pouvez pas vous souvenir de ce que c'est.

EDIT < / strong> trouvé! Sur UNIX, les programmes exécutés avec & Rependus seront exécutés à l'arrière-plan. Désolé, ne vous aide pas beaucoup.


4 commentaires

J'ai fini par utiliser le fichier de lot et faire: Système ("CMD / C C: [Chemin de fichier à fichier]"); Qui empêche le script. Des idées sur la façon de tuer le processus? Cela ouvre effectivement Adobe Reader et j'ai toujours besoin d'un moyen de le fermer avant que le script ne fonctionne à nouveau.


NEUVEZ NEWMIND, s'avère que je n'ai pas besoin de tuer le processus. Je peux laisser ça courir.


J'essaie actuellement ceci sur un système Windows et il attend toujours que le script se termine dans la fenêtre du navigateur, quel que soit le fait, il s'agit d'une sortie dans un fichier. Des pensées à ce sujet?


@Williamw w Si vous vous rafraîchissez cette fenêtre, une nouvelle instance sera créée et cela peut être problématique pour certains d'entre nous.



5
votes

Ce fonction du manuel PHP Aide? < Pré> xxx


2 commentaires

J'ai fini par utiliser (presque) cela pour lancer un fichier de commandes et cela fonctionne parfaitement maintenant.


Désolé de creuser cette vieille tombe. J'utilise le même code pour exécuter un programme externe que j'ai fabriqué en C #. Le script de navigateur / PHP ou Apache se bloque, si cette application C # jette une exception. Y a-t-il un travail autour de cela ??



11
votes

shell_exec ('start / b "c: \ chemin \ to \ programme.exe"');

Le paramètre / b est la clé ici.

Je n'arrive pas à trouver où j'ai encore trouvé cela. Mais cela fonctionne pour moi.


1 commentaires

Pour des raisons d'exhaustivité, je laisse le lien vers les docs sur la commande de démarrage ici: Techet.microsoft.com/en-us/Library/cc770297 (v = ws.11) .aspx



3
votes

essayé d'obtenir la même chose sur un serveur Windows 2000 avec PHP 5.2.8.

Aucune des solutions n'a fonctionné pour moi. PHP a continué à attendre la réponse.

a trouvé la solution à être: xxx


0 commentaires

1
votes

sur mes machines Windows 10 et Windows Server 2012, la seule solution qui a fonctionné de manière fiable dans PCLose / Popen consistait à appeler la commande de démarrage de PowerShell, comme dans la suivante: xxx

ou plus verbauly si Vous souhaitez fournir des arguments et des sorties de redirection: xxx


0 commentaires