¿Puedo iniciar una secuencia de comandos por lo que es independiente de su proceso padre en Linux?

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

Pregunta

¿Hay una manera de iniciar una secuencia de comandos de otro proceso, por lo que si el proceso muere / extremos, el guión sigue siendo?

Se setuid hacer esto? Si tuviera que cambiar el dueño de raíz, y luego iniciar el guión?

Por ejemplo, si tengo algo de código PHP a partir de un guión, pero httpd muere o se matan, yo creo que eso me quita el guión con él. ¿Hay una manera de evitar esto?

Específicamente, estoy en Fedora 10 con Apache 2 y PHP 5.

¿Fue útil?

Solución

aquí :

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

Además, es una buena idea para cerrar stdin, stdout y stderr, pero no estoy seguro de cómo hacer que en PHP.

Otros consejos

Trate de "nohup yourscript.sh &"

Puede utilizar el "desconocer" incorporada en bash para separar un trabajo de la cáscara que lo generó. Ver: http://www.faqs.org/docs/bashman/bashref_79.html

Debe utilizar pcntl_fork de php () (según lo recomendado por @bmdhacks).

El proceso básico es, tenedor, setsid, tenedor de nuevo, chdir a /, y cerrar todos los descriptores de archivo abiertos. La práctica estándar también dicta que se crea un archivo llamado /var/run/$NAME, (donde $ NAME es el nombre de su demonio), y escribir el PID a ese archivo, por lo que se puede controlar la ejecución del proceso más adelante.

No soy un programador php, pero esto es * nix cosas estándar. El mejor ejemplo de php que puede google tiene este aspecto hola-mundo-daemon-con-tenedor Sin embargo, él no cambia su directorio de trabajo a '/', ni que parezca que cierra los descriptores de archivos abiertos (no estoy seguro de cómo podría funcionar en PHP), por lo que no está conectado a la entrada estándar, salida estándar, y stderr del proceso original.

cavé un poco más, y encontramos otro artículo que puede ayudar con php pcntl_fork ()

Y, parece que hay un módulo de pera llamada System_Daemon , que se encarga de esto para usted (lo encontré a través aquí ).

A partir de la orden de shell que puede anexar un signo (&) en el extremo de la línea de comandos para iniciar el comando en el fondo, que lo separa de la cáscara.

Algunos buena información aquí: http: //www.linuxforums. org / foro / linux-programación-script / 50096-movimiento-procesos-fondo-foreground.html

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top