jll*_*gre 23
如果你的任务已经启动,为时已晚*考虑其他的解决方案,将您之间的附加层ssh会话和shell中运行命令一样screen,tmux,byobu,nohup和喜欢。
如果要放置在你的后台进程的支持,特别是不挂时stdout和stderr不可写/关闭,你可以把它的背景,在注销前ControlZ,并bg随后从与您的外壳拆下它disown内置。
例如:
$ 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
$
Run Code Online (Sandbox Code Playgroud)
*正如 Bob 所评论的,实际上有几种黑客方法可以在 Linux 下重新设置 tty 会话。repty、retty、injcode和neercs。最高级的看起来是reptyr,但您可能需要 root 权限才能启用 ptrace 来破解您的进程。
一种解决方案是使用GNU screen。你可以启动screen,运行你的命令,然后用 分离C-a d。稍后,要重新连接,请执行screen -r,然后您将返回上一个会话。
screen 的其他好处是窗口管理(因此您可以在命令运行时切换到其他 shell,而无需新的 SSH 连接),并且它允许您的命令保留在前台,无论是在当前会话中还是在以后的会话中。
编辑:如评论中所述,这仅在您记得screen在运行命令之前启动时才有效。如果命令已经在运行,那么您将需要@jlliagre 的解决方案。