Si su tarea ya se inició, es demasiado tarde*
para considerar soluciones alternativas que inserten una capa adicional entre su ssh
sesión y el shell ejecutando el comando, como screen
, tmux
, byobu
, nohup
y similares.
Si su proceso admite que se coloque en segundo plano y, en particular, no se cuelga cuando stdout
y stderr
no se pueden escribir/cerrar, puede ponerlo en segundo plano antes de cerrar sesión con Control Z y bg
luego sepárelo de su caparazón con el disown
integrado.
por ejemplo:
$ 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 de cambiar el padre de una sesión de tty en Linux. repty, retty, injcode y neercs. El más avanzado parece ser reptyr, pero es posible que necesite privilegios de root para permitir que ptrace piratee su proceso.
Una solución es usar la pantalla GNU. Podría iniciar screen
, ejecuta tu comando, luego sepáralo con C-a d
. Más tarde, para volver a conectar, haga screen -r
, y vuelve a su 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 indica en los comentarios, esto solo funcionará si recuerda iniciar screen
antes de ejecutar el comando. Si el comando ya se está ejecutando, necesitará la solución de @jlliagre.