GNU屏幕复制模式会阻止执行?


11

我使用GNU屏幕的回滚/复制模式。因此,我按Control-A [进入复印模式,向上滚动到我关心的部分...,然后我忘记了。

但是,似乎让GNU屏幕处于回滚/复制模式会阻止执行(无论当时什么应用都在运行)。例如,如果我处于滚动/复制模式时启动本地Web服务器,则对该Web服务器发出的请求将超时:该过程直到我退出复制/滚动模式才响应。

我已经在Ruby On Rails脚本/服务器和Python工具Paste中看到了这一点。

我曾经考虑过为Windows打开日志记录模式,然后在这些日志文件中拖尾/遍历作为替代方法,但是如果可以通过另一种方式(设置,以其他方式激活复制模式)来控制它,我会非常感兴趣。

我的屏幕版本说:

屏幕版本4.00.03(FAU)2006年10月23日

(我在quora.com上问过这个问题,但也许这是一个更好的地方)

Answers:


8

您的进程被阻塞的原因是,当您处于复制粘贴模式时,屏幕将阻塞该进程的输出管道。我认为它并不是真正的错误,因为实际上,您在复制/粘贴时要求屏幕在其缓冲区中存储可能无限量的信息。如果要传递程序的输出,但又希望偶尔将其暂停,请尝试此操作。

program > logfile 2>&1 & 
less logfile

2>&1将组合程序中的stderr和stdout。&将程序发送到后台。如果需要,请使用fg将其带到前台。现在按F跟随日志文件的结尾,随着它的增加而减少。如果您需要停止并检查某些内容,请按ctrl + c,然后按F再按一次。您也可以按&将可见行限制在正则表达式之内。浏览日志文件时非常方便。


“在复制粘贴模式下,屏幕将阻塞过程的输出管道”-一旦生成一定量的输出,这可能是正确的,但在这种情况下似乎不正确:while ((1)) ; do echo $i; i=$((i+1)); sleep 0.1; done-尝试调用复制模式,请稍等。退出复印模式时,i的值将跳升,表明执行在后台继续进行。但是我看到了某些进程的屏幕块输出,因此我对究竟是什么决定屏幕块是否正确感到好奇。
davidA

“究竟由什么决定屏幕是否阻塞”-滚动缓冲区的大小决定了它。您可以将其增加为无限,但这会占用内存。但是不会阻塞。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.