Kann ich ein Skript starten, damit es seinen übergeordneten Prozesses auf Linux unabhängig ist?

StackOverflow https://stackoverflow.com/questions/855549

Frage

Gibt es eine Möglichkeit, ein Skript aus einem anderen Prozess zu starten, so dass, wenn der Prozess stirbt / endet, geht das Skript noch?

Wird setuid dies tun? Wenn ich an den Eigentümer zu root setzen, und dann das Skript starten?

Zum Beispiel, wenn ich einig PHP-Code startet ein Skript, aber httpd stirbt oder getötet wird, denke ich, dass es mit ihm meinen Skript nimmt. Gibt es eine Möglichkeit, um dieses?

Insbesondere, ich bin auf Fedora 10 mit Apache 2 und PHP 5.

War es hilfreich?

Lösung

hier :

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

Darüber hinaus ist es eine gute Idee, STDIN, STDOUT und STDERR, aber ich bin mir nicht sicher, wie man das in PHP.

schließen

Andere Tipps

Versuchen "nohup yourscript.sh &"

Sie können mit dem „Ablehnungs“ built-in in bash einen Auftrag aus der Schale lösen, die sie hervorgebracht haben. Siehe: http://www.faqs.org/docs/bashman/bashref_79.html

Sie sollten PHP pcntl_fork () (wie von @bmdhacks empfohlen) verwenden.

Die Grundlagen Prozess ist, Gabel, setsid, Gabel wieder, chdir zu /, und schließen Sie alle geöffneten Datei-Deskriptoren. Gängige Praxis diktiert auch, dass Sie eine Datei erstellen /var/run/$NAME genannt, (wo $ NAME Ihrer Daemon-Name ist), und schreiben Sie die PID zu dieser Datei, so dass Sie später die Prozessausführung auf steuern können.

Ich bin kein PHP-Programmierer, aber dies ist Standard * nichts Zeug. Das beste PHP-Beispiel kann ich wie folgt aussehen google Hallo-Welt-daemon-mit-fork Aber hat er nicht sein Arbeitsverzeichnis ändern, um ‚/‘, noch sieht es aus wie er Deskriptoren für offene Dateien geschlossen (Ich bin nicht sicher, wie dies würde in PHP arbeiten), so dass er nicht auf die stdin, stdout verbunden ist, und stderr des ursprünglichen Prozesses.

grub ich ein wenig mehr, und fand einen anderen Artikel, der mit PHP helfen können pcntl_fork ()

Und es sieht aus wie eine Birne Modul namens System_Daemon , die dies für Sie Griffe (ich fand es durch hier ).

Von der Kommando-Shell Sie ein kaufmännisches anhängen (&) auf das Ende der Befehlszeile den Befehl im Hintergrund zu starten, die sie von der Schale löst.

Einige gute Infos hier: http: //www.linuxforums. org / forum / linux-Programmierung-Scripting / 50096-moving-Prozesse-Hintergrund-foreground.html

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top