首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在使用进程替换时停止tee以截断标准输入

如何在使用进程替换时停止tee以截断标准输入
EN

Stack Overflow用户
提问于 2015-11-19 01:39:42
回答 1查看 533关注 0票数 1

我正在测试随机数生成器,我需要将它的输出传递给各种测试。由于RNG与测试相比相对较慢,而且我需要测试0.5-1TB的数据,因此我想到了使用tee将RNG中的数据传递给所有测试的想法。主要的好处是我只需要生成数据。该命令为

代码语言:javascript
复制
./RNG | tee >(test1) >(test2) >(test3) >/dev/null

然而,它并没有像预期的那样工作。例如,当test1完成时,tee将停止所有其他测试,即使它们需要更多数据才能完成。

您可以使用命令来查看问题:

代码语言:javascript
复制
cat /dev/zero | tee >(head -c200M | md5sum) >(head -c10M | sha1sum) | wc -c

输出为: 10559568

我希望tee会在所有子进程都结束后才结束,但事实并非如此。它将在第一个进程结束后停止(在本例中为head -c10M | sha1sum)。我能做些什么来改变这种行为呢?

EN

回答 1

Stack Overflow用户

发布于 2015-11-19 08:11:50

一些版本的tee already support --output-error=warn,这意味着输出错误是通过标准错误错误诊断的,但tee不会在写入管道时退出。不幸的是,我笔记本电脑上的tee是非常基本的,所以我无法检查这个选项是否满足您的测试用例。

您可能需要将最终的>/dev/null替换为最长的测试用例,或者替换为>(head -c1000G)之类的代码,否则tee将一直通过管道将数据传输到/dev/null

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33786735

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档