“屏幕”窗口管理器的最大回滚大小

“屏幕”窗口管理器的最大回滚大小

“屏幕”窗口管理器允许指定回滚缓冲区的所需大小。

例如,当开始新会话时:(来源

‘-h num’
    Set the history scrollback buffer to be num lines high.
    Equivalent to the defscrollback command (see Copy).

或者当已经在屏幕会话中时使用以下命令:(来源

12.1.2 Scrollback
— Command: defscrollback num
           Same as the scrollback command except that the default
           setting for new windows is changed. Defaults to 100. 
— Command: scrollback num
           Set the size of the scrollback buffer for the current 
           window to num lines. The default scrollback is 100 lines.
           Use C-a i to view the current setting.

num但我似乎找不到说明上述任何方法的最大值的文档。

那么问题是:如何确定屏幕实用程序的最大回滚长度?

答案1

我不确定在哪里可以找到它的记录,但是深入研究一下源代码可以找到一些线索。当您传入时,-h它会设置histheight(请参阅屏幕.c)。其中main解析-h如下:

case 'h':
    if (--argc == 0)
        exit_with_usage(myname, NULL, NULL);
    nwin_options.histheight = atoi(*++argv);
    if (nwin_options.histheight < 0)
        exit_with_usage(myname, "-h: %s: negative scrollback size?", *argv);
    break;

nwin_options结构是一个实例NewWindow,定义在窗口.h

struct NewWindow {
    int StartAt;    /* where to start the search for the slot */
    char    *aka;       /* aka string */
    char    **args;     /* argv vector */
    char    *dir;       /* directory for chdir */
    char    *term;      /* TERM to be set instead of "screen" */
    bool    aflag;
    bool    dynamicaka;
    int flowflag;
    int lflag;
    int histheight;
    int monitor;
    int wlock;      /* default writelock setting */
    int silence;
    bool    wrap;
    bool    Lflag;      /* logging */
    int slow;       /* inter character milliseconds */
    int gr;
    bool    c1;
    int bce;
    int encoding;
    char    *hstatus;
    char    *charset;
    int poll_zombie_timeout;
};

我们可以看到它是一个 int,所以大概您可以将其设置为有符号 int 的histheight最大值。maxint

答案2

在尝试回答我自己的问题时,这是我通过反复试验在自己的系统上发现的:

答案:有一个硬限制(50,000,000 到 1,000,000,000 之间),但性能可能是你的瓶颈(因此我无法确定确切的硬限制)

我的实验包括:

在没有任何配置文件的情况下启动新的屏幕会话~/.screenrc

screen -a

ctrl在屏幕内按+打开屏幕命令提示符a:然后输入命令:

scrollback 1000000

结果是消息:scrollback set to 1000000(1,000,000)。

尝试scrollback 1000000000(1,000,000,000) 很快就得到了消息scrollback set to 0。我认为这意味着 1,000,000 被接受,而 1,000,000,000 太多了。

尝试scrollback100000000` (100,000,000) 导致屏幕挂起。第二个终端会话和一些耐心之后我能够杀死屏幕。当再次尝试同样的事情时,这种行为被证明是一致的。

延迟 2 秒尝试scrollback 10000000(10,000,000) 会产生消息scrollback set to 10000000

延迟 60 秒尝试scrollback 50000000(50,000,000) 会产生消息scrollback set to 50000000

相关内容