3 votos

Cómo ejecutar un proceso y sepárela completamente de su concha madre

Posibles Duplicados:
Dejar de bash script que se ejecuta en la terminal remota, mientras que no se registran?
¿Cómo puedo separar un proceso desde la Terminal, en su totalidad?

Estoy ejecutando un programa en un servidor linux que tardará días para completar.

Estoy lanzamiento de mi estación de trabajo de un terminal SSH, ya que este programa es sólo la línea de comandos.

Quiero ser capaz de hacer todas estas :

  • el lanzamiento de dicho programa,
  • redirigir salidas estándar para los archivos,
  • salir de mi sesión de SSH sin hacer esto terminar el proceso.

Pensé $ ./MyProg.csh -params -foo -bar </dev/null 1>~/out.log 2>~/err.log &

Sin embargo, el proceso se termina en el momento de cerrar mi sesión de SSH. Mi estación de trabajo se está ejecutando Windows XP, y no puedo garantizar su operatividad durante varios días, que se requiere para el procesamiento de mis datos en el servidor Linux.

Como habrás notado, mi programa requiere para ser lanzada a partir de CSH.

Es posible hacer esto ?

Gracias.

8voto

bitsMix Puntos 251

usted puede ya sea de usuario screen o nohup

si usted elige screen :

lanzar screen antes de ejecutar su servicio:

$ screen

y a continuación, ejecute su servicio dentro de la screen:

./MyProg.sh > myprog.log ( o lo que quieras aquí ).

y, a continuación, Ctrl+un d

cuando regresó, solo tienes que:

$ screen -r

para obtener más información: http://www.gnu.org/s/screen/


sobre el nohup : solo tienes que:

nohup ./MyProg.sh > myprog.log &

1voto

Cougar Puntos 459

Hacer un contenedor de shell como esta:

#!/bin/sh
exec </dev/null
exec >> ~/out.log
exec 2>> ~/err.log
exec setsid ./MyProg.csh -params -foo -bar

Si usted necesita también archivo PID, entonces enviar esta secuencia de comandos de shell para bg y leer $! (PID del último proceso de bg). Lo puedes hacer con subshell () en el mismo script como este:

#!/bin/sh
( exec </dev/null
  exec >> ~/out.log
  exec 2>> ~/err.log
  exec setsid ./MyProg.csh -params -foo -bar
) &
kill -0 $! > /dev/null 2>&1 || exit 1
echo $! > program.pid
exit 0

0voto

Lark Puntos 1640

La conexión se cae porque la cáscara envía SIGHUP a todos los niños al salir. Si usas bash o zsh, puede usar disown y la concha ya no enviará SIGHUP y permanecerán alrededor de los procesos.

screeny setsid por encima de obras, pero esta respuesta tiene la ventaja de no tener que acordarse de la pantalla antes de empezar cualquier cosa. screentiene un montón de energía aparte de esto, por lo que puede entrar en un hábito de su uso.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: