窃取并重新附加正在运行的进程

窃取并重新附加正在运行的进程

今天是周日,我在办公室留下了一个正在运行的 R 实例。脚本运行完毕,我想保存我的工作区而不去办公室。我可以 ssh 到计算机,但我还没有在屏幕上运行该程序。

有没有办法通过 ssh 来否认该进程(我无权访问程序运行的终端的 jobsid!)并用 reptyr 重新附加它?如果没有事先否认进程,reptyr 和 reptyr -T 就无法工作

28845 3diag       20   0  139.3m  10.4m   0.0  0.1   0:12.06 S  `- urxvtd                                                                                      
 5327 3diag       20   0   16.4m   4.6m   0.0  0.1   0:00.02 S      `- bash                                                                                    
 5335 3diag       20   0 3499.3m 3.244g   0.0 43.3 171:57.89 S          `- R 

我的问题的独特部分是,我明确要求分离程序,而无需访问创建该程序的终端。

答案1

调用reptyr足以分离终端,但必须

sudo reptyr -T $PID

man reptyr

-T

使用另一种附加模式“TTY 窃取”。

在此模式下,reptyr 不会 ptrace(2) 目标进程,但会尝试发现该进程 pty 的终端仿真器,并窃取 pty 的主端。

这种模式在许多情况下更加可靠和灵活(例如,它可以将所有进程附加到 tty 上,而不仅仅是单个进程)。

然而,作为一个缺点,sshd(8) 的子级不能通过 -T 连接,除非以 root 身份运行reptyr。看 ⟨https://blog.nelhage.com/2014/08/new-reptyr-feature-tty-stealing/⟩ 了解有关 tty 窃取的更多信息。

相关内容