Pokud je vaše úloha již spuštěna, je příliš pozdě*
zvážit alternativní řešení, která vloží další vrstvu mezi vaše ssh
session a shell spouštějící příkaz, například screen
, tmux
, byobu
, nohup
a lajky.
Pokud má být podpora vašeho procesu umístěna na pozadí a zejména nevisí při stdout
a stderr
jsou nezapisovatelné/uzavřené, můžete je před odhlášením umístit na pozadí pomocí Control Z a bg
pak jej oddělte od vašeho shellu pomocí disown
vestavěný.
např.:
$ 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
$
*
Jak Bob poznamenal, ve skutečnosti existuje několik hackerských způsobů, jak znovu vytvořit relaci tty pod Linuxem. repty, retty, injcode a neercs. Nejpokročilejší vypadá jako reptyr, ale možná budete potřebovat práva root, abyste umožnili ptrace hacknout váš proces.
Jedním z řešení je použití obrazovky GNU. Můžete spustit screen
, spusťte příkaz a poté odpojte pomocí C-a d
. Později se pro opětovné připojení proveďte screen -r
a jste zpět v předchozí relaci.
Dalšími výhodami obrazovky je správa oken (takže můžete přepínat na jiné shelly, když je váš příkaz spuštěn, aniž byste potřebovali nové připojení SSH), a umožňuje vašemu příkazu zůstat v popředí, ať už v aktuální relaci nebo později.
Upravit: Jak je uvedeno v komentářích, bude to fungovat, pouze pokud si nezapomenete spustit screen
před spuštěním příkazu. Pokud je příkaz již spuštěn, budete potřebovat řešení @jlliagre.