Si su tarea ya está en marcha, ya es demasiado tarde *
para considerar soluciones alternativas que insertar una capa adicional entre su ssh
sesión y la cáscara de la ejecución del comando, como screen
, tmux
, byobu
, nohup
y los gustos.
Si el soporte de procesos para ser colocado en el fondo y en particular no se cuelga cuando stdout
y stderr
no son modificables / cerrado, se puede poner en el fondo antes de salir con el ControlZy bg
luego separarla de su cáscara con la disown
orden interna.
p.ej:
$ ssh localhost
You have new mail.
Last login: Fri Jun 6 11:26:56 2014
$ /bin/sleep 3600
^Z[1] + Stopped /bin/sleep 3600
$ bg
[1] /bin/sleep 3600&
$ jobs
[1] + Running /bin/sleep 3600
$ disown %1
$ exit
Connection to localhost closed.
$ ps -ef|grep sleep
jlliagre 12864 1 0 21:12 ? 00:00:00 /bin/sleep 3600
jlliagre 13056 12477 0 21:13 pts/18 00:00:00 grep sleep
$
*
Como comentó Bob, en realidad hay varias formas hack para reparar una sesión tty en Linux. repty, retty , injcode y neercs . Las apariencias más avanzadas son reptyr, pero es posible que necesite privilegios de root para permitir que ptrace piratee su proceso.
disown
comando. Regresó: bash: advertencia: eliminar el trabajo 1 detenido con el grupo de procesos 24876. Ahora mi trabajo aparece en la listaps -all
pero parece que no funciona (el uso de la CPU es 0%)disown
comandobg
se requería el comando en la primera parte de mi respuesta. Editadokill -CONT
que hace aproximadamente lo mismo que lo haría bg.Una solución es usar la pantalla GNU . Puede iniciar
screen
, ejecutar su comando y luego desconectarse conC-a d
. Más tarde, para volver a conectar, hazloscreen -r
y estarás de vuelta en tu sesión anterior.Otros beneficios de la pantalla son la administración de ventanas (para que pueda cambiar a otros shells mientras se ejecuta su comando, sin necesidad de una nueva conexión SSH), y permite que su comando permanezca en primer plano, ya sea en la sesión actual o en una posterior.
Editar: como se señaló en los comentarios, esto solo funcionará si recuerda comenzar
screen
antes de ejecutar el comando. Si el comando ya se está ejecutando, necesitará la solución de @ jlliagre.fuente
tmux
es otro programa comoscreen
ese que le permite tener una sesión remota que no está vinculada a su conexión SSH actual.screen
.screen
otmux
.)Una de las formas "estándar" de hacerlo es usar el
nohup
comando, incluido encoreutils
, como este:Pero el comando redirigirá la salida (
STDOUT
&STDERR
AFAIK) del programa a un archivonohup.out
, haciéndolo de alguna manera molesto a veces (como generar un archivo de registro enorme), por lo que es posible que desee hacer su propia redirección o redirigirla a / dev / null si tu quieres.fuente
nohup
se puede usar para esto. Simplemente suspenda el proceso de ejecución y envíelo a segundo plano (Ctrl
+Z
y ejecutarbg
) y luego puede emitirnohup %1
.Además
nohup
, puede iniciar el proceso en segundo plano utilizando "&" y subshell:Sufije el comando con & y envuélvalo entre paréntesis
Digamos que su proceso gana el pid 1922:
Mire que no está conectado al proceso de shell 11473, que era su padre original. Por lo tanto, si sale o elimina el shell actual (11473), el proceso 11922 seguirá ejecutándose y se desconectará de los pts.
Intente salir del shell e ingrese un nuevo shell. Incluso si este shell está conectado a los mismos pts, puede ver el proceso ahora sin un pts:
No sé cómo se llama o documenta en Posix, pero lo uso de esta manera desde 1990 en bsh, ksh y ahora en bash.
Por último, puede usar el
bg
comando de shell incorporado:Simplemente inicie su programa y si decide pausarlo, o planea mantenerlo en segundo plano, escriba CTRL + Z:
Ahora deje que continúe ejecutándose en segundo plano:
Si observa la información del proceso, todavía tiene un proceso padre:
Entonces, salga del proceso actual. El proceso de ejecución en segundo plano no está unido a su padre original y sigue ejecutándose en segundo plano:
Inicie sesión nuevamente y mire la información del proceso:
fuente