我正在尝试使用docker attach
附加到基于 curses 的图形进程:
$ docker run --name irssi -it pandrew/irssi irssi
当您使用 断开与该进程的连接^P^Q
,然后重新连接docker attach irssi
时,看起来好像什么都没发生。但是,该进程确实重新连接了,因为您可以键入命令,并且可以通过触发重绘慢慢地重新构建图形界面。尽管如此,重新连接后,该进程的行为还是很奇怪。
但是,如果您最初在内部运行该进程screen
,则一切都正常:
$ docker run --name irssi -it ${PREVIOUS_IMAGE_PLUS_SCREEN} screen irssi
您可以从容器中分离并重新连接,屏幕的一些问题会导致 irssi 会话正常运行。看来 irssi 有能力检查它是否“脏”,并重新绘制屏幕:https://github.com/irssi/irssi/blob/master/src/fe-text/irssi.c#L123。
有人能帮忙解释一下这是怎么回事吗?谢谢。
答案1
当您重新连接到全屏应用时,该应用需要重新绘制。Screen 擅长确定何时重新连接,并重新绘制自身 - 通常通过监听 SIGWINCH(表示终端大小已更改)来实现。它可能具有一些用于监控其终端的附加功能,使其能够在此处取得成功,而 irssi 则无法做到这一点。
根据上一个建议irssi 提示页面,您应该能够输入/redraw
irssi 来重绘屏幕,或者将其绑定到 ^L /bind ^L redraw
。