studio programacion móviles libros desarrollo desarrollar curso con aprende aplicaciones java linux sockets process

java - programacion - Proceso de fondo en Linux



manual de programacion android pdf (5)

¿Intentó poner & al final de la línea de comando? Por ejemplo:

java -jar mySocketApp.jar &

También puede usar los comandos bg y fg para enviar un proceso a fondo y primer plano. Puede pausar el proceso en ejecución con CTRL + Z.

Échale un vistazo a este artículo: http://lowfatlinux.com/linux-processes.html

He desarrollado una conexión de servidor de socket Java que funciona bien.

Cuando se inicia desde un terminal, comienza escuchando desde el cliente. Pero cuando cierro el terminal deja de escuchar.

Necesito continuar aunque el terminal se cerró por usuario desde donde se inició el archivo jar.

¿Cómo puedo ejecutar la aplicación de socket del servidor Java en Linux como proceso en segundo plano?


Hay una cosa crucial que debes hacer después de agregar un & al final del comando. El proceso todavía está vinculado a la terminal. Necesita ejecutar el disown después de ejecutar el comando java.

java -jar yourApp.jar > log.txt & disown

Ahora, puedes cerrar la terminal.


Hay varias maneras en que puede lograr tal cosa:

  1. nohup java -server myApplication.jar > /log.txt - esto es bastante directo. Simplemente colocará la aplicación en segundo plano. Esto funcionará, pero simplemente no es una muy buena manera de hacerlo.
  2. Utilice un contenedor de shell y la aplicación de daemon OR anterior. Este enfoque es utilizado por muchos proyectos de código abierto y es bastante bueno para la mayoría de los escenarios. Además, se puede incluir en init.d y en el nivel de ejecución requerido con comandos regulares de inicio, detención y estado. Puedo proporcionar un ejemplo si es necesario.
  3. Cree su propio servidor daemon utilizando Java Service Wrapper o Apache Jakarta Commons Daemon . Nuevamente, ambos son extremadamente populares, bien probados y confiables. ¡Y disponible tanto para Linux como para Windows! ¡El servidor de Tomcat utiliza el de Apache Commons! Además está Akuma .

Personalmente, me gustaría ir con la solución 2 o 3 si necesita usar este servidor en el futuro y / o distribuirlo a clientes, usuarios finales, etc. nohup es bueno si necesita ejecutar algo y no tiene tiempo para desarrollar una solución más compleja por el problema

Anuncio 2:

Los mejores guiones, utilizados por muchos proyectos, se pueden encontrar here .

Para Debian / Ubuntu uno puede usar un script muy simple basado en start-stop-daemon . Si tiene dudas, puede /etc/init.d/skeleton uno puede modificar.

#!/bin/sh DESC="Description" NAME=YOUR_NAME PIDFILE=/var/run/$NAME.pid RUN_AS=USER_TO_RUN COMMAND=/usr/bin/java -- -jar YOUR_JAR d_start() { start-stop-daemon --start --quiet --background --make-pidfile --pidfile $PIDFILE --chuid $RUN_AS --exec $COMMAND } d_stop() { start-stop-daemon --stop --quiet --pidfile $PIDFILE if [ -e $PIDFILE ] then rm $PIDFILE fi } case $1 in start) echo -n "Starting $DESC: $NAME" d_start echo "." ;; stop) echo -n "Stopping $DESC: $NAME" d_stop echo "." ;; restart) echo -n "Restarting $DESC: $NAME" d_stop sleep 1 d_start echo "." ;; *) echo "usage: $NAME {start|stop|restart}" exit 1 ;; esac exit 0


La frase clave que necesita aquí es "daemonizar un proceso". ¿Alguna vez se preguntó por qué los procesos del servidor del sistema a menudo terminan en ''d'' en Linux / Unix? La ''d'' significa ''daemon'', por razones históricas.

Entonces, el proceso de separar y convertirse en un verdadero proceso de servidor se llama "daemonización".

Es completamente general, y no se limita solo a los procesos de Java.

Hay varias tareas que debe hacer para convertirse en un proceso de daemon verdaderamente independiente. Están listados en la página de Wikipedia.

Las dos cosas principales de las que debes preocuparte son:

  • Separar del proceso principal
  • Separar del tty que creó el proceso

Si googleas la frase "daemonizing a process", encontrarás varias formas de lograr esto, y algunos detalles más sobre por qué es necesario.

La mayoría de la gente simplemente usaría un pequeño script de shell para iniciar el proceso de Java, y luego terminaría el comando java con un ''&'' para iniciarse en modo de fondo. Luego, cuando finaliza el proceso de script de inicio, el proceso de java aún se está ejecutando y se separará del proceso de script ahora está muerto.


tratar,

java -jar yourApp.jar &

& comenzará un nuevo hilo de proceso, no lo he probado, pero si aún no funciona, mézclelo en el archivo de script y empiece con i