2010-08-12 2 views
0

Je vais vous montrer un peu de code, d'abord:
A propos de la fonction exec() et le temps

echo exec("compile\\save.exe Untitled.c tmpUntitled.c");

J'ai un programme, nommé save.exe et je veux savoir s'il déjà arrêté?
En cas d'arrêt, ok ... Faites quelque chose ...

Dans le cas contraire, peut-être une erreur ou une boucle ...
maintenant: Je veux construire même de contrôler le temps que l'utilisation du programme , et mettre une limite (limite de temps dépasser, quelque chose comme ça ...)

Quelqu'un a une suggestion?




Modifier [1]:save.exe est un programme écrit sur le langage C, et utiliser deux paramètres: source et destin.
popen juste n'exécutez pas save.exe, je dis cela parce qu'il ne gerenate plus le destin (avec exec il arrive);

+0

Exec ne le fera pas. Utilisez 'popen', qui est asynchrone. – zneak

+0

Voir aussi stream_select pour appliquer les limites de temps. – Artefacto

Répondre

1

exec() suspendra votre script pendant l'exécution du programme exec. Le contrôle sera renvoyé uniquement lorsque le programme externe se termine. Si vous voulez voir si le programme est raccroché ou en attente d'une entrée ou quelque chose, vous utilisez popen(), qui renvoie un handle de fichier à partir duquel vous pouvez lire la sortie du programme. À ce stade, vous pouvez faire une boucle d'interrogation pour voir s'il y a eu une sortie:

$app = popen("your shell command here"); 

while($output = fgets($app)) { 
    // handle output 
    sleep(5); // sleep 5 seconds 
}  

Si vous voulez envoyer quelque chose à l'application en entrée, vous devez utiliser proc_open(), qui permet une communication bidirectionnelle entre votre script et le programme externe.