すでに実行中のセッションをフィルタリングする方法は? [繰り返し]

すでに実行中のセッションをフィルタリングする方法は? [繰り返し]

重複の可能性:
実行中のプロセスを拒否し、それを新しいスクリーンシェルに接続する方法は?

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マイグレーションのみをサポートします。

関連情報