terminal - 打印到终端会导致 OOM(内存不足)吗?

标签 terminal printf

  • 打印到终端如何影响内存使用?它会一直吃掉内存直到OOM吗?
  • 在 docker 容器中呢?
  • 操作系统如何处理打印到终端的内存?
  • 操作系统是否在某个时刻刷新终端?
  • 最佳答案

    当您调用 printf为了打印到终端,标准库将使用行缓冲并等待换行符写入输出。大小将取决于实现(可能是 8K)。见:In C, what's the size of stdout buffer? .但是这种内存使用量不会随着时间的推移而增长。
    写入时(通过 write 系统调用),缓冲区将通过 pipe 复制。 s 和 pty s 最终出现在终端仿真器中,然后将其显示在屏幕上。除了 scrollback终端仿真器的缓冲区,它不会沿此路径累积。
    大多数终端仿真器都会有回滚缓冲区的限制,默认为几千行。在此限制之后,旧行可能会被释放。一些终端模拟器提供了删除限制的选项,这意味着它可能会增长直到 OOM(我相信在 macOS 上,终端应用程序实际上会处理此事件以清除回滚缓冲区)并且终端模拟器可能会被 OOM-killer 杀死。从操作系统的角度来看,它与任何其他进程间通信没有什么不同。
    容器可能只会影响管道的创建。它仍然是调用 printf 的进程。 ,通过内核将生成的缓冲区发送到终端仿真器进程。

    关于terminal - 打印到终端会导致 OOM(内存不足)吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48816658/

    相关文章:

    macos - 如何设置终端脚本在 Mac OS X Snow Leopard 上启动时运行?

    c - 数字的半金字塔

    c++ - 是否可以从 C printf() 捕获错误?

    c - 使用指针模拟简单函数的引用传递,但没有输出

    php - 警告 : fgets() expects parameter 1 to be resource, 中给出的字符串

    c - 重定向已杀死的可执行文件的标准输出

    c - ncurses 和 C- 在 ncurses 窗口中显示 'df' 命令的输出

    c - printf输出指针字符串解释来自一次采访

    c - 使用 %d 类型转换导致输出不正确的值

    ssh - 禁用 MobaXterm 文件浏览器侧边栏自动打开