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

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


+  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 10,528 veces)
agus0


Desconectado Desconectado

Mensajes: 360



Ver Perfil
[Ayuda] shell_exec y como Correr un programa en segundo plano
« en: 17 Marzo 2015, 15:04 pm »

Hola muchachos... le cuento que tengo una pequeña duda... tengo un Servidor con Ubuntu y PHP 5.6.3 y me gustaría invocar desde PHP a un programa que corre "en modo terminal" y que en algún otro momento pueda enviarle la orden de finalizar el programa...
por si no me explique bien... lo que me gustaría hacer es llamar a que se ejecute un programa desde php, y desde php mas adelante poder enviarle instrucciones al programa... como por ejemplo "stop" y la verdad es que no tengo idea de por donde empezar...
si no fui claro con lo que dije intentare explicarlo de nuevo.

Gracias
Saludos.


« Última modificación: 17 Marzo 2015, 15:13 pm por agus0 » 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 #1 en: 17 Marzo 2015, 16:00 pm »

¿Enviar instrucciones? ¿El programa funciona de forma interactiva? Puedes usar 'kill' con shell_exec para matar el proceso.


En línea

agus0


Desconectado Desconectado

Mensajes: 360



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

Claro. por ejemplo es como el servicio de apache. "apache start", "apache restart" "apache stop"... eso me gustaría poder "controlar"
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 #3 en: 17 Marzo 2015, 16:15 pm »

Claro. por ejemplo es como el servicio de apache. "apache start", "apache restart" "apache stop"... eso me gustaría poder "controlar"

¿Tienes otro servidor web que esta usando PHP para iniciar el proceso de apache? Ese servidor web debe tener permisos de root para poder iniciar apache al menos bajo el puerto 80. Si es el mismo servidor apache que esta corriendo bajo el mismo puerto solo podrias usar apache stop y para eso tambien necesitas permisos root.
En línea

agus0


Desconectado Desconectado

Mensajes: 360



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

Di apache como ejemplo pero es otro programa, el problema y la diferencia con apache es que usando shel_exec() es como si se cerrara "terminal" en la que estoy ejecutando el  programa
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 #5 en: 17 Marzo 2015, 16:34 pm »

Di apache como ejemplo pero es otro programa, el problema y la diferencia con apache es que usando shel_exec() es como si se cerrara "terminal" en la que estoy ejecutando el  programa

¿Cerrara "terminal"?

Si es un script que solo inicia y detiene un programa en el background entonces con shell_exec te basta. Si es un proceso que continua ejecutandose y no regresa un valor necesitas enviarlo al background:

Código
  1. shell_exec(.'/server &>/dev/null &')
En línea

agus0


Desconectado Desconectado

Mensajes: 360



Ver Perfil
Re: [Ayuda] shell_exec y como Correr un programa en segundo plano
« Respuesta #6 en: 18 Marzo 2015, 12:54 pm »

¿Cerrara "terminal"?

Si es un script que solo inicia y detiene un programa en el background entonces con shell_exec te basta. Si es un proceso que continua ejecutandose y no regresa un valor necesitas enviarlo al background:

Código
  1. shell_exec(.'/server &>/dev/null &')

A lo que me refiero con "Cerrar el terminal" es que, la funcion de php "shell_exec()" se comporta como si cada vez que se termina la instrucción la terminal se finalizara (exit), es decir si yo uso
Código
  1. <?php
  2.  shel_exec('cd /home/unacarpeta');
  3.  echo(shel_exec('ls'));
  4. ?>

esto no me muestra el contenido de la carpeta "/home/unacarpeta" sino que muestra el contenido de la carpeta donde se encuentre el archivo php que invoca la función shel_exec(), ahora para motrar el contenido en "/home/unacarpeta" yo tendría que hacer todo en una misma linea usando "&&"



se me ocurrió un ejemplo mas concreto que es casi justo lo que busco...

ejemplo tengo en mi servidor el servicio de "Minecraft" y para iniciarlo tengo que ejecutar el programa Java
 
Código
  1. java -Xmx2048M -Xms1024M -jar server_minecraft.jar nogui

ahora bien, como puedo invocar a este programa y que no se cierre desde php y en el caso de que mas adelante lo quiera cerrar enviándole la instrucción "stop" como podría hacerlo.
Saludos

Mod: No hacer doble post.
« Última modificación: 18 Marzo 2015, 13:22 pm por #!drvy » 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 #7 en: 18 Marzo 2015, 16:44 pm »

A lo que me refiero con "Cerrar el terminal" es que, la funcion de php "shell_exec()" se comporta como si cada vez que se termina la instrucción la terminal se finalizara (exit), es decir si yo uso
Código
  1. <?php
  2.  shel_exec('cd /home/unacarpeta');
  3.  echo(shel_exec('ls'));
  4. ?>

esto no me muestra el contenido de la carpeta "/home/unacarpeta" sino que muestra el contenido de la carpeta donde se encuentre el archivo php que invoca la función shel_exec(), ahora para motrar el contenido en "/home/unacarpeta" yo tendría que hacer todo en una misma linea usando "&&"



se me ocurrió un ejemplo mas concreto que es casi justo lo que busco...

ejemplo tengo en mi servidor el servicio de "Minecraft" y para iniciarlo tengo que ejecutar el programa Java
 
Código
  1. java -Xmx2048M -Xms1024M -jar server_minecraft.jar nogui

ahora bien, como puedo invocar a este programa y que no se cierre desde php y en el caso de que mas adelante lo quiera cerrar enviándole la instrucción "stop" como podría hacerlo.
Saludos

Mod: No hacer doble post.

No necesitas hacer un cambio de directorio para usar ls.

Código
  1. ls /home/unacarpeta

En cuanto a tu server de Minecraft, si al iniciar el server no retorna un valor y sigue corriendo el proceso en el foreground tu shell exec se queda colgado, porque sigue esperando una respuesta del comando. Es por eso que tienes que enviarlo al background.

En cuanto a enviar "stop" no se que comando utilices para eso.
En línea

agus0


Desconectado Desconectado

Mensajes: 360



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

No necesitas hacer un cambio de directorio para usar ls.

Código
  1. ls /home/unacarpeta

En cuanto a tu server de Minecraft, si al iniciar el server no retorna un valor y sigue corriendo el proceso en el foreground tu shell exec se queda colgado, porque sigue esperando una respuesta del comando. Es por eso que tienes que enviarlo al background.

En cuanto a enviar "stop" no se que comando utilices para eso.

si lo de hacerlo en una sola linea lo se, pero lo di a modo de ejemplo...

En el caso del Servidor. tendria que "retomar" esa aplicación que quedo BackGround y enviar la instrucción "stop" ¿es esto posible?



¿Cerrara "terminal"?

Si es un script que solo inicia y detiene un programa en el background entonces con shell_exec te basta. Si es un proceso que continua ejecutandose y no regresa un valor necesitas enviarlo al background:

Código
  1. shell_exec(.'/server &>/dev/null &')

otra cosa y perdón por la ignorancia pero me explicas un poco mas...

Para que sirve el "." antes del apostrofo, y para que es el "&>" y el "&" del final. Gracias!

Mod: No hacer doble post.
« Última modificación: 19 Marzo 2015, 21:27 pm por #!drvy » 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 #9 en: 18 Marzo 2015, 17:37 pm »

si lo de hacerlo en una sola linea lo se, pero lo di a modo de ejemplo...

En el caso del Servidor. tendria que "retomar" esa aplicación que quedo BackGround y enviar la instrucción "stop" ¿es esto posible?

shell_exec() no es una terminal interactiva. Si por ejemplo, el programa espera que escribas en la terminal: "stop", no lo vas a poder hacer atraves de shell_exec(). Lo que si puedes hacer es enviar la señal SIGTERM a tu proceso de java por medio de kill. En ese caso no importa si esta en el foreground o background, la aplicacion termina.
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,490 Último mensaje 15 Septiembre 2012, 19:10 pm
por Eleкtro
como ejecuto un programa en segundo plano
Windows
General Dmitry Vergadoski 1 8,454 Último mensaje 6 Noviembre 2012, 13:29 pm
por dato000
Ejecutar programa java en segundo plano
Java
mapers 4 7,628 Último mensaje 3 Septiembre 2013, 11:04 am
por Debci
Ayuda: Crear programa oculto o segundo plano
Programación Visual Basic
SugarCrush 1 2,887 Ú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,739 Último mensaje 9 Febrero 2016, 16:57 pm
por darkweb64
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines