
日曜日にオフィスに実行中の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
:
-ティー
別の追加モード、「TTY Stealing」を使用してください。
このモードでは、 reptyr はターゲットプロセスを ptrace(2) しませんが、プロセス pty のターミナルエミュレータを検索し、pty のマスター側を盗もうとします。
このモードは多くの場合、より信頼性が高く柔軟性があります(たとえば、単一のプロセスだけでなく、すべてのプロセスをttyに接続できます)。
ただし、欠点として、sshd(8)の子は、reptyrがrootとして実行されていない限り、-Tを介して接続できません。バラより⟨https://blog.nelhage.com/2014/08/new-reptyr-feature-tty-stealing/ ttyを盗むことの詳細を学んでください。