2010-07-29 3 views
0

Je suis en train de développer un script de ligne de commande de longue durée et bien sûr je ne veux pas me lancer plus d'une fois. Donc, j'écris un fichier .pid et au lancement de vérifier si un processus avec un tel PID existe. Le problème est sur Windows il retourne 0 comme un PID, donc je reçois toujours un processus par ce PID en cours d'exécution (System Idle a PID 0).Pourquoi dans PHP CLI getmypid() retourne 0 comme un pid?

Est-ce que quelqu'un sait comment résoudre ce problème? Puis-je faire fonctionner un démon sur Windows? Peut-être que le correctif sera forking avec pcntl_fork?

P.S. J'utilise Yii et c'est la classe CConsoleCommand comme base.

Répondre

0

Je peux me tromper mais je ne pense pas que si vous écrivez un .pid, que sur Windows il vérifiera le fichier.

Vous pouvez vérifier si le fichier existe et, dans ce cas, ne pas l'exécuter à nouveau. Et afaik pcntl_fork ne fonctionne pas sur Windows (par défaut, avec une sorte d'émulateur * nix cela peut fonctionner)

+0

Je vérifie le PID moi-même, j'écris un fichier PID et à la prochaine exécution de vérifier si le fichier existe et si c'est le cas - lisez le PID et lancez tasklist.exe pour vérifier si ce PID est en cours d'exécution. La mauvaise chose est getmypid renvoie 0, pas le processus pid. – Psihius

+0

Quelle version de Windows et PHP? Je suis sur Windows 7 et PHP 5.3.2, et ça marche très bien pour moi. Je cours "print getmypid(); flush(); sleep (35);" puis dans une autre fenêtre cmd je lance tasklist.exe et il se montre là-bas. Avez-vous essayé de voir manuellement si elle apparaît dans la liste des tâches? Si c'est le cas, votre analyse est peut-être incorrecte? –

+0

En fait, j'ai découvert que j'ai fait un type dans le nom de la fonction, j'appelais getmygid() et non getmypid(). Maintenant, cela fonctionne très bien. Désolé pour le dérangement :) – Psihius