Question

Y at-il un moyen de lancer un script à partir d'un autre processus, de sorte que si le processus meurt / fin, le script continue encore?

Est-ce que setuid faire cela? Si je devais définir le propriétaire à la racine, puis lancer le script?

Par exemple, si j'ai un code PHP à partir d'un script, mais httpd meurt ou est tué, je pense qu'il faut mon script avec elle. Y at-il un moyen de contourner cela?

Plus précisément, je suis sur Fedora 10 avec Apache 2 et PHP 5.

Était-ce utile?

La solution

De :

function become_daemon() 
{
    $child = pcntl_fork();
    if($child) {
        exit; // kill parent
    }
    posix_setsid(); // become session leader
}

En outre, il est une bonne idée de fermer STDIN, STDOUT et STDERR mais je ne suis pas sûr de savoir comment faire en PHP.

Autres conseils

Essayez "nohup yourscript.sh &"

Vous pouvez utiliser le intégré « désavouer » en bash pour détacher un emploi du shell qui l'a engendré. Voir: http://www.faqs.org/docs/bashman/bashref_79.html

Vous devez utiliser la pcntl_fork de php () (tel que recommandé par @bmdhacks).

Le processus de base est, fourchette, setsid, fourchette à nouveau, à chdir / et fermer tous les descripteurs de fichiers ouverts. La pratique standard dicte également que vous créez un fichier appelé /var/run/$NAME, (où $ NOM est le nom de votre démon) et écrivez le PID à ce fichier, de sorte que vous pouvez contrôler l'exécution du processus par la suite.

Je ne suis pas un programmeur php, mais est standard * nix choses. Le meilleur exemple de php je peux google ressemble à ceci bonjour-monde-démon avec fourche Mais, il ne change pas son répertoire de travail « / », ni ne ressemble-il fermé les descripteurs de fichiers ouverts (je ne sais pas comment cela fonctionnerait en php), de sorte qu'il est pas connecté au stdin, stdout, et stderr du processus initial.

Je creusais un peu plus, et a trouvé un autre article qui peut aider à son php pcntl_fork ()

Et, il semble qu'il y ait un module de poire appelé System_Daemon , qui gère pour vous (je l'ai trouvé par ).

De la commande shell vous pouvez ajouter une esperluette (&) à la fin de votre commande en ligne pour lancer la commande en arrière-plan, qu'il se détache de la coquille.

Quelques bonnes infos ici: http: //www.linuxforums. org / forum / linux-programmation-scripts / 50096-mouvement-processus-background-foreground.html

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