Se la tua attività è già stata avviata, è troppo tardi*
prendere in considerazione soluzioni alternative che inseriscano uno strato aggiuntivo tra i tuoi ssh
session e la shell che esegue il comando, come screen
, tmux
, byobu
, nohup
e simili.
Se il tuo processo supporta l'essere messo in background e in particolare non si blocca quando stdout
e stderr
non sono scrivibili/chiusi, puoi metterli in background prima di uscire con Controllo Z e bg
poi staccalo dalla tua shell con il disown
incorporato.
es:
$ 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
$
*
Come ha commentato Bob, in realtà ci sono diversi modi hacker per riparare una sessione tty sotto Linux. repty, retty, injcode e neercs. Il più avanzato sembra essere reptyr ma potresti aver bisogno dei privilegi di root per consentire a ptrace di hackerare il tuo processo.
Una soluzione è usare lo schermo GNU. Potresti avviare screen
, esegui il comando, quindi scollega con C-a d
. Successivamente, per riconnetterti, esegui screen -r
e torni alla sessione precedente.
Altri vantaggi di screen sono la gestione delle finestre (quindi puoi passare ad altre shell mentre il tuo comando è in esecuzione, senza bisogno di una nuova connessione SSH) e consente al tuo comando di rimanere in primo piano, sia nella sessione corrente che in una successiva.
Modifica: Come notato nei commenti, funzionerà solo se ti ricordi di avviare screen
prima di eseguire il comando. Se il comando è già in esecuzione, avrai bisogno della soluzione di @jlliagre.