明明打印到文件了,为啥tail -f看不到

简介: 文章《一分钟了解nohup和&的功效》留了一个“nohup.out为啥没有包含stdout输出”的尾巴,今天把坑填了。

文章《一分钟了解nohup和&的功效》留了一个“nohup.out为啥没有包含stdout输出”的尾巴,今天把坑填了。

image.png

测试代码是一个打印hello与循环轮数的死循环程序,每打印一行就休眠1秒。

image.png

使用./a.out 运行程序后,每隔一秒会在终端输出一个字符串。

image.png

使用nohup ./a.out运行程序后,有一个“忽略输入,输出至nohup.out”的提示。

image.png

把程序killall干掉之后,果然有一个nohup.out生成。

不过这个文件的大小是0,有点奇怪,启动程序的时候,明明提示了“appending output to nohup.out”呀,这是为什么呢?原本打印在终端的hello字符串去哪里了呢?

留言里不少同学猜测和2>&1 >/dev/null有关,但其实本例并未将标准输出,标准错误输出重定向。

nohup.out未能及时输出,是因为nohup后,为了提高性能stdout启用了缓冲,并不会实时把内容写入文件,只有当缓冲写满了才会刷盘。killall程序时,还来不及刷盘程序就退出了,于是出现了空nohup.out文件。

如果想要实时刷盘,可以选择:

  • 把缓冲设为空,setbuf(stdout, NULL)
  • 强制刷盘,fflush(stdout)

image.png

如上图,程序添加一行“fflush(stdout)”之后,再次测试。

image.png

就能够看到nohup.out会实时的刷新数据啦。

遗留:

  • 评论里说的2>&1 >/dev/null 是什么鬼?
  • 打印日志的时候,是需要实时刷新,还是缓存刷新呢?

额,上一篇《一分钟了解nohup和&的功效》,介绍了一个linux小知识,就被喷得厉害,评论说文章拉低了58的技术水准,下一篇回归架构,介绍“全链路调用链跟踪架构”以及“如何在小公司快速落地全链路调用链跟踪实践”。

目录
相关文章
|
安全 Shell Linux
【Shell 命令集合 文件管理】Linux ssh 远程主机之间复制文件 scp 命令使用教程
【Shell 命令集合 文件管理】Linux ssh 远程主机之间复制文件 scp 命令使用教程
1166 0
|
Java API Maven
pom文件的<scope>标签详细含义是什么
【4月更文挑战第13天】pom文件的<scope>标签详细含义是什么
1641 3
SpringBoot——SpringBoot中使用过滤器Filter的两种方式
SpringBoot——SpringBoot中使用过滤器Filter的两种方式
2914 0
SpringBoot——SpringBoot中使用过滤器Filter的两种方式
|
4月前
|
JSON 前端开发 Java
Spring Boot 返回 JSON 数据及数据封装
本课讲解Spring Boot中JSON处理:通过@RestController返回JSON,利用内置Jackson实现对象、List、Map自动序列化,并自定义配置优雅处理null值,提升前后端交互体验。
|
API 数据安全/隐私保护 UED
探索鸿蒙的蓝牙A2DP与访问API:从学习到实现的开发之旅
在掌握了鸿蒙系统的开发基础后,我挑战了蓝牙功能的开发。通过Bluetooth A2DP和Access API,实现了蓝牙音频流传输、设备连接和权限管理。具体步骤包括:理解API作用、配置环境与权限、扫描并连接设备、实现音频流控制及动态切换设备。最终,我构建了一个简单的蓝牙音频播放器,具备设备扫描、连接、音频播放与停止、切换输出设备等功能。这次开发让我对蓝牙技术有了更深的理解,也为未来的复杂项目打下了坚实的基础。
624 58
探索鸿蒙的蓝牙A2DP与访问API:从学习到实现的开发之旅
|
11月前
|
API C++ 开发者
PySide vs PyQt:Python GUI开发史诗级对决,谁才是王者?
PySide 和 PyQt 是 Python GUI 开发领域的两大利器,各有特色。PySide 采用 LGPL 协议,更灵活;PyQt 默认 GPL,商业使用需授权。两者背后团队实力雄厚,PySide 得到 Qt 官方支持,PyQt 由 Riverbank Computing 打造。API 设计上,PySide 简洁直观,贴近原生 Qt;PyQt 增加 Pythonic 接口,操作更高效。性能方面,两者表现优异,适合不同需求的项目开发。选择时可根据项目特点与开源要求决定。
1226 20
|
6月前
|
JavaScript 前端开发 安全
Vue 3 + TypeScript 现代前端开发最佳实践(2025版指南)
每日激励:“如果没有天赋,那就一直重复”。我是蒋星熠Jaxonic,一名执着于代码宇宙的星际旅人。用Vue 3与TypeScript构建高效、可维护的前端系统,分享Composition API、状态管理、性能优化等实战经验,助力技术进阶。
Vue 3 + TypeScript 现代前端开发最佳实践(2025版指南)
|
SQL Oracle 关系型数据库
Oracle 从 DMP 文件中恢复指定表的步骤
Oracle 从 DMP 文件中恢复指定表的步骤
1474 7
|
前端开发 程序员 调度
探索协程在 C++ 中的实现方式
探索协程在 C++ 中的实现方式
504 2