Gnome 终端回滚行?

Gnome 终端回滚行?

目前,我已将 gnome 终端的回滚设置(编辑 -> 配置文件首选项 -> 滚动)设置为 10000 行。我很想勾选“无限制”,但我担心这会导致内存崩溃(如果我让一个有大量输出的程序整夜运行,我不希望它因此而崩溃)。

我的问题是:

  1. 这些回滚线是存储在内存中,还是缓存在磁盘上的文件中?

  2. 如果我从 10000 改为 100000 或 100 万,我是否仍然安全?我需要考虑哪些参数(RAM、可用磁盘空间、打开的终端数量)?选择“无限制”是否安全?

答案1

据非常有趣的是,它显然存储在磁盘上已删除的文件中博客文章

我可以看看哪些文件gnome-terminal打开了,这样就lsof可以了。然后我发现它很狡猾,它有许多名为/tmp/vteXYZ1tv打开的文件,但它已经删除了它们。因此,您在浏览时看不到它们,并且它们将在程序关闭时被删除。这是有道理的,这意味着当进程关闭时,无论如何(至少我认为),文件的空间都可以被回收,即我们不会在程序崩溃或时得到剩余的文件kill -9。但它们可以恢复,我的方法(可能还有其他方法)是执行以ls -l /proc/<gnome-terminal pid>/fd查看它们指向什么。然后您可以使用cat这些来创建一个新文件。这些只是终端输出的逐字副本。没有压缩。什么都没有。事实证明,我的一个终端历史记录几乎有 900 MB!但那只是在随机数据被快速吐出很长一段时间之后,在正常使用中不太可能发生。

我再强调一下:发布者已经运行了base64 < /dev/urandom一段时间,寻找内存或磁盘使用量的增加 - 900MB 将是异常使用量。

答案2

gnome-terminal(实际上vte)确实将回滚存储在立即删除的文件中/tmp(更准确地说:在受影响的标准临时文件位置下$TMPDIR,也许还有一些类似的文件)。

选择这种设计主要是为了避免无限回滚导致 OOM 错误。磁盘被填满的可能性要小得多,即使发生这种情况,对整个系统的危害也比内存耗尽要小。

vte-0.40(很可能会出现在 Ubuntu 15.10 WW 中)将压缩并加密这些文件。这将使所需存储空间缩小到其大小的约三分之一到四分之三(如果您的应用程序以纯文本形式生成 X 量数据,则 X/4 到 X/3 之间是所需存储空间的合理估计),并且还可以消除隐私/安全问题,以防有人获得对硬盘的原始访问权限。

我们计划添加一个选项,将回滚存储在内存中,就像您/tmp在 上一样tmpfs。如果一切按计划进行,这将vte-0.42在 Ubuntu 16.04 XX LTS 中出现。但我不能保证。

相关内容