Si votre tâche est déjà lancée, il est trop tard*
envisager des solutions alternatives qui insèrent une couche supplémentaire entre vos ssh
session et le shell exécutant la commande, comme screen
, tmux
, byobu
, nohup
et les goûts.
Si votre processus supporte d'être placé en arrière-plan et surtout ne se bloque pas lorsque stdout
et stderr
sont non inscriptibles/fermés, vous pouvez les mettre en arrière-plan avant de vous déconnecter avec Control Z et bg
puis détachez-le de votre coque avec le disown
intégré.
ex :
$ 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
$
*
Comme Bob l'a commenté, il existe en fait plusieurs façons de renommer une session tty sous Linux. repty, retty, injcode et neercs. Le plus avancé semble être reptyr, mais vous aurez peut-être besoin des privilèges root pour permettre à ptrace de pirater votre processus.
Une solution consiste à utiliser l'écran GNU. Vous pouvez démarrer screen
, lancez votre commande, puis détachez avec C-a d
. Plus tard, pour vous reconnecter, faites screen -r
, et vous êtes de retour dans votre session précédente.
Les autres avantages de l'écran sont la gestion des fenêtres (vous pouvez donc basculer vers d'autres shells pendant que votre commande est en cours d'exécution, sans avoir besoin d'une nouvelle connexion SSH), et cela permet à votre commande de rester au premier plan, que ce soit dans la session en cours ou dans une session ultérieure.
Modifier : Comme indiqué dans les commentaires, cela ne fonctionnera que si vous vous souvenez de commencer screen
avant d'exécuter la commande. Si la commande est déjà en cours d'exécution, vous aurez besoin de la solution de @jlliagre.