screen
セッションの中断からプロセスを保護するには、セッション内で長いプロセスを実行することをお勧めします。しかし、すでに実行中のプロセスがあり、実行するのを忘れた場合はどうすればよいですかscreen
?どういうわけか、現在のセッションを「キャプチャ」して保護することは可能ですかscreen
?
答え1
rettyプログラムを見たいです。ホームページはhttp://pasky.or.cz//dev/retty/
アイデアはstdin/stderr/stdoutをリダイレクトすることです。 gdbを使用してこれを実行できますが、この小さなプログラムを使用すると簡単になります。完璧ではありませんが、作業を完了する必要があります。
答え2
答え3
まさか。
最も近い方法は次のとおりです。
新しい画面ウィンドウを起動し、次を実行します。
trap '' INT HUP
exec sleep 99999999
内部に。ウィンドウの tty( $tty
) を記録します。
lsof
セッション内のどのプロセスのうち、どのfdが現在ttyで開いているかを調べるために使用されます。
gdbを使用してセッション内の各プロセスに接続し、call signal(1,1)
SIGHUPを無視する操作を実行します。セッションリーダーの場合、call dup2(0,1023)
以前の端末でfdを開いたままにするために(ttyで0が開いていると仮定する)作業を実行する必要があるかもしれません。その後、各プロセスに対して実行します。
set variable $fd = open("the-screen-window-tty",2)
次に、前の端末で開いていた各fdに対して、次の操作を行います。
call dup2($fd, that-fd)
それから:
call close($fd)
detach
新しい端末に接続されたセッションはリーダー(唯一のプロセス)として「休止」プロセスを持ちますが、ウィンドウのサイズ変更、CTRL-C、CTRL-Z、ジョブ制御、/ dev / ttyなどの操作は機能しません。私が思わなかったより不快な副作用があるかもしれません。
Linuxの場合、レプテル、あなたの質問に対するコメントで、@angusが提案した新しいptyを作成し、移行したいプロセスによって制御できるようにして、プロセスを自動化し、上記の欠点を解決してください。ただし、1つのプロセスAFAICTマイグレーションのみをサポートします。