linux - 正在运行的进程上的 greps 管道不输出任何内容
问题描述
我正在使用 macbook,达尔文操作系统。
我有一个正在运行的进程 ./r ,它生成一个它运行的日志文件。这是一个长期运行的过程。
当我像这样过滤一次时,它会起作用,并且我会看到所有行,但其中包含“A”的行除外。
./r | grep -v A
但是当我这样做时,没有输出,即使并非所有行都包含'B'
./r | grep -v A | grep -v B
为了证明这一点,我可以做到这一点,这确实显示了输出。
./r > tmp
# wait 30 seconds, ctrl-c
cat tmp | grep -v A | grep -v B
解决方案
缓冲。
当它在 tmp 文件中并通过管道将其输入时,有一个 EOF,它结束了管道。但是对于您正在运行的进程,EOF 永远不会出现(因为进程仍在运行)。
可能有一个环境和/或操作系统级别的设置,idk ......但你可以强制 grep 不缓冲超过一行。
试试这个。
grep --line-buffered -v A
推荐阅读
- docker - 识别 docker 主机名是否被传递或生成
- docker-compose - Spring Cloud Data Flow 微服务无法访问 Docker Compose Config Server
- angular - 角 | NgFor 显示数组内容
- java - MPAndroidChart - 长按显示 MarkerView
- javascript - JavaScript:将文本复制到剪贴板而不进行格式化
- html - 标签更改布局设计
- python - 使用 Apple Silicon M1 在 Docker 中出现 Discord.py 分段错误
- r - 如何创建和添加多个序列?
- javascript - 读取远程图像并在请求中返回
- javascript - 获取所有具有角色的用户