2010-07-14 3 views
3

Comme une extension à la question « php execute a background process »:Comment exécuter un processus d'arrière-plan en PHP et lire/écrire son stdout/stdin?

Supposons que je voulais garder un processus en cours au cours d'une session de PHP, comme une coquille bash interactive. Comment puis-je établir la redirection de stdout/stdin de telle sorte que PHP puisse lire/écrire dans le processus? MISE À JOUR: La clé est de pouvoir démarrer le processus et le maintenir en arrière-plan afin que les requêtes ultérieures puissent accéder à ses flux stdout/stdin.

Répondre

2

Je voudrais utiliser PHP Expect. La documentation a de très bons usage examples.

+1

Une fois le processus démarré, comment obtenez-vous son retour sur les requêtes successives? – spoulson

+0

@spoulson: Ah, je vois - votre question est plus claire maintenant que vous l'avez mise à jour :-). C'est beaucoup plus difficile, laissez-moi réfléchir ... – psmears

0

Si vous utilisez PHP pour relayer les commandes tapé par l'utilisateur à un shell, vous pouvez utiliser des appels mulitple à shell_exec

shell_exec renverra la sortie complète que vous pouvez ensuite faire écho à l'utilisateur.

1

Si vous utilisez Linux, vous pouvez accéder au système de fichiers proc sur/proc. Bien que les distributions puissent différer quelque peu, dans Ubuntu Server, je peux trouver mon stdio dans/proc/<pid>/fd/[012]. 0 est stdin, 1 est stdout et 2 est stderr. Cela ne fonctionnera probablement pas si vous les redirigez depuis ou vers/dev/null, comme vous le feriez pour certaines méthodes de rotation des processus d'arrière-plan. Si vous avez accès au pid du processus d'arrière-plan (la http://nsaunders.wordpress.com/2007/01/12/running-a-background-process-in-php/), vous devriez pouvoir accéder à stdin/stdout du processus sous Linux.

Questions connexes