elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  PHP (Moderador: #!drvy)
| | | |-+  [Ayuda] shell_exec y como Correr un programa en segundo plano
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 [2] Ir Abajo Respuesta Imprimir
Autor Tema: [Ayuda] shell_exec y como Correr un programa en segundo plano  (Leído 9,971 veces)
Pablo Videla


Desconectado Desconectado

Mensajes: 2.274



Ver Perfil WWW
Re: [Ayuda] shell_exec y como Correr un programa en segundo plano
« Respuesta #10 en: 19 Marzo 2015, 14:31 pm »

Esto te ayudará.

Código
  1. <?php
  2. /* An easy way to keep in track of external processes.
  3. * Ever wanted to execute a process in php, but you still wanted to have somewhat controll of the process ? Well.. This is a way of doing it.
  4. * @compability: Linux only. (Windows does not work).
  5. * @author: Peec
  6. */
  7. class Proceso{
  8.    private $pid;
  9.    private $command;
  10.  
  11.    public function __construct($cl=false){
  12.        if ($cl != false){
  13.            $this->command = $cl;
  14.            $this->runCom();
  15.        }
  16.    }
  17.    private function runCom(){
  18.        $command = 'nohup '.$this->command.' > /dev/null 2>&1 & echo $!';
  19.        exec($command ,$op);
  20.        $this->pid = (int)$op[0];
  21.    }
  22.  
  23.    public function setPid($pid){
  24.        $this->pid = $pid;
  25.    }
  26.  
  27.    public function getPid(){
  28.        return $this->pid;
  29.    }
  30.  
  31.    public function status(){
  32.        $command = 'ps -p '.$this->pid;
  33.        exec($command,$op);
  34.        if (!isset($op[1]))return false;
  35.        else return true;
  36.    }
  37.  
  38.    public function start(){
  39.        if ($this->command != '')$this->runCom();
  40.        else return true;
  41.    }
  42.  
  43.    public function stop(){
  44.        $command = 'kill '.$this->pid;
  45.        exec($command);
  46.        if ($this->status() == false)return true;
  47.        else return false;
  48.    }
  49. }
  50. ?>

ejemplo de prueba

Código
  1.  $programa = "/usr/bin/perl script.pl parametros";
  2.             $proceso = new Proceso($programa);

Esperar a que termine por si solo
Código
  1. //proceso ejecutando
  2. while($proceso->status()){
  3.  
  4.       }
  5. //proceso finalizado.
  6.  
Puedes pararlo con los metodos de la clase, saludos.


« Última modificación: 19 Marzo 2015, 14:34 pm por DonVidela » En línea

agus0


Desconectado Desconectado

Mensajes: 360



Ver Perfil
Re: [Ayuda] shell_exec y como Correr un programa en segundo plano
« Respuesta #11 en: 24 Marzo 2015, 16:30 pm »

Esto te ayudará.

Muchas Gracias... pero no entendí bien como usar esta Clase


En línea

MinusFour
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.529


I'm fourth.


Ver Perfil WWW
Re: [Ayuda] shell_exec y como Correr un programa en segundo plano
« Respuesta #12 en: 24 Marzo 2015, 16:56 pm »

Muchas Gracias... pero no entendí bien como usar esta Clase

Solo es cuestion de pasarle el comando al constructor y de ahi iniciar o detener el proceso. Sin embargo, la clase de la forma en la que esta escrita, no puede detener el proceso entre peticiones. Tendrias que persistir la ID del proceso de alguna forma. Realmente la idea es la misma que comentaba, necesitas usar kill para enviar SIGTERM a tu proceso corriendo.
En línea

Pablo Videla


Desconectado Desconectado

Mensajes: 2.274



Ver Perfil WWW
Re: [Ayuda] shell_exec y como Correr un programa en segundo plano
« Respuesta #13 en: 24 Marzo 2015, 17:04 pm »

Solo es cuestion de pasarle el comando al constructor y de ahi iniciar o detener el proceso. Sin embargo, la clase de la forma en la que esta escrita, no puede detener el proceso entre peticiones. Tendrias que persistir la ID del proceso de alguna forma. Realmente la idea es la misma que comentaba, necesitas usar kill para enviar SIGTERM a tu proceso corriendo.

No sería buena idea mantener identificada por session la ID del proceso y matarla cuando el quiera? Es cosa de modificar la clase.
En línea

MinusFour
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.529


I'm fourth.


Ver Perfil WWW
Re: [Ayuda] shell_exec y como Correr un programa en segundo plano
« Respuesta #14 en: 24 Marzo 2015, 17:30 pm »

Yo preferiria guardar el proceso en una base de datos o un archivo. Pierdes mucho control sobre la PID si usas sessiones, porque las sessiones pueden expirar, son diferentes para cada usuario/navegador, etc.
En línea

Pablo Videla


Desconectado Desconectado

Mensajes: 2.274



Ver Perfil WWW
Re: [Ayuda] shell_exec y como Correr un programa en segundo plano
« Respuesta #15 en: 24 Marzo 2015, 19:36 pm »

Yo preferiria guardar el proceso en una base de datos o un archivo. Pierdes mucho control sobre la PID si usas sessiones, porque las sessiones pueden expirar, son diferentes para cada usuario/navegador, etc.

Todo depende de lo que el necesite hacer exactamente.
En línea

Páginas: 1 [2] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Como poner programa en el inicio y que salga en segundo plano
Windows
NoTaTuS 9 13,102 Último mensaje 15 Septiembre 2012, 19:10 pm
por Eleкtro
como ejecuto un programa en segundo plano
Windows
General Dmitry Vergadoski 1 8,257 Último mensaje 6 Noviembre 2012, 13:29 pm
por dato000
Ejecutar programa java en segundo plano
Java
mapers 4 7,195 Último mensaje 3 Septiembre 2013, 11:04 am
por Debci
Ayuda: Crear programa oculto o segundo plano
Programación Visual Basic
SugarCrush 1 2,573 Último mensaje 11 Febrero 2016, 00:21 am
por fary
[Python + tkinter + cx_Freeze] programa se ejecuta en segundo plano aunque de ce
Scripting
darkweb64 0 2,400 Último mensaje 9 Febrero 2016, 16:57 pm
por darkweb64
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines