转载请注明地址:http://blog.csdn.net/echoutopia/article/details/51655882

之前做一个分页,利用grep加head加tail实现的:

ls /tmp/conf/usergroup/ | grep -P '^(?!auto-)'| head -n 20 | tail -n 20 | awk -F . '{print $1}'

grep出来的条数大概有6w条,然后用php的exec去执行这条命令,大概耗时1.3秒,感觉太慢,不能接受。

后面发现直接去终端执行这条命令,real time只有0.27秒,居然差了一秒,于是着手排查问题

开始以为是php派生进程耗时太多,于是exec(“echo aaa"),很快。

后面脑洞大开,会不会是报错了,于是改了下命令:

(ls /tmp/conf/usergroup/ | grep -P '^(?!auto-)'| head -n 20 | tail -n 20 | awk -F . '{print $1}') 2>&1

卧槽,打印php的exec内容,一下在出来了6w多条broken pipe的错误,简直恐怖。

但是这个错误怎么来的呢,去查了下资料,原来是head的原因。

这条命令执行过程中,会派生grep进程和head进程(其他忽略),他们通过管道传输数据,grep往管道写,head从管道读。

因为grep出来的结果又6w多条,所以head进程会往管道写6w条数据,

但是head在取了20条后,就关闭了管道,但是grep不知道,所以还在一直往没有读端的管道一直写,导致出现了6w多条

write error: Broken pipe错误。。

解决办法:

1、可以把错误重定向到/dev/null,这样就清静了。

2、grep有个-m 参数,即查找到了规定的数目结果后,停止查找。

我改进的命令为:

ls /tmp/conf/usergroup/ | grep -P '^(?!auto-)'-m 20 | tail -n 20 | awk -F . '{print $1}'

一下子速度跟终端也差不多了

只是心里还有个疑问,为啥终端里执行这个命令不会有broken pipe这个错误,希望有人不吝赐教

看来我对linux的了解还只是scratch the surface啊

转载请注明地址:http://blog.csdn.net/echoutopia/article/details/51655882

linux 错误信息 输出到管道,linux grep通过管道输出到head出现write error: Broken pipe错误...相关推荐

  1. 排查IOException Broken pipe 错误,偶遇国外小哥

    大家好,我是阿飞云 怕什么真理无穷,进一步有近一步的欢喜 今天我们聊一个异常:java.io.IOException: Broken pipe,为什么会报这个异常,这个异常要怎么解决?以及最后偶遇外国 ...

  2. tcp连接时,BROKEN PIPE错误

    TCP协议是端到端的传输控制协议,之所以是"端到端"的协议,是因为"路由"是由IP协议负责的,TCP协议负责为两个通信端点提供可靠性保证,这个可靠性不是指一个端 ...

  3. tcp连接时,BROKEN PIPE错误的原因以及解决方法

    tcp连接时,BROKEN PIPE错误的原因以及解决方法 参考文章: (1)tcp连接时,BROKEN PIPE错误的原因以及解决方法 (2)https://www.cnblogs.com/ctho ...

  4. broken pipe错误

    错误描述 错误详情 提示connection reset by peer 和 broken pipe 错误原因 数据库读取的量过多,返回数据时前端未完成接受数据就关闭了连接

  5. linux 电池信息,分享|如何在 Linux 终端下检查笔记本电池状态

    在图形界面下查看你的笔记本电池状态是很容易的,只需将鼠标指向任务栏中的电池图标上,你便可以很容易地知道电池的电量.但如果我们想要从命令行中获得这些信息呢?并不是所有人都知道如何做到这点.前几天我的一个 ...

  6. 逐鹿工具显示服务器错误连接不上怎么解决,win7系统中安装逐鹿工具箱时提示“error launching installer”错误怎么解决 Lin...

    延伸:Linux系统在CPAN中安装Perl模块的方法 描述:Perl是编程语言,像C语言一样强大,使用也很方便,可是Perl自带的模块较少,有时需要从CPAN上下载Perl模块,那么Linux系统操 ...

  7. linux dmesg信息哪来的,linux中的dmesg命令简介

    今天, 我们来介绍一个linux中的dmesg命令,事实上, 我们之前用过, 但是没有单独介绍过. 看一下dmesg命令的用途吧: dmesg命令用会把开机信息存到ring bufer中, 形成一个缓 ...

  8. linux 串口信息记到日志,[linux学习笔记]之一:ubuntu ch340调试备忘

    [linux学习笔记]之一:ubuntu ch340调试备忘 已有 2183 次阅读2016-11-8 21:52 |个人分类:linux 最近迷上了Linux,入了一块板.电脑使用win7+ubun ...

  9. 获取linux详细信息,通过编程获取Linux文件系统使用的详细信息

    去年的操作系统课程设计,我做了一个基于linux到任务管理器.大部分需要到系统信息都是从linux下 的一个伪文件系统/proc中读出的.大家都知道,此文件系统只存在内存当中,而不占用外存空间.它以文 ...

最新文章

  1. 那些珍贵的「视觉SLAM」课程资料总结(补充版/完整版)
  2. Datatable中对某列求和,三种不同情况下的方法 .
  3. 数据库中的约束和三大范式
  4. matlab中图像处理的基本函数(1)
  5. ScrollView 里面嵌套 listview 使得listview只显示一行问题解决
  6. 自定义StartIO
  7. android:scaletype=quot;fitxyquot;,Android ImageView的ScaleType属性
  8. protoc执行命令
  9. 2019-05-23 嗅探工具;影音嗅探;IRIS嗅探器;
  10. 数字转型遇阻 ,Riverbed重塑APM工具
  11. ntfs磁盘 0字节 0byte 文件目录损坏且无法读取 RAW chkdsk失败
  12. 《有限与无限的游戏》第一章 世上至少有两种游戏:经典摘抄(2)
  13. C++20中的协程(Coroutine)
  14. leetcode 19. 删除链表的倒数第 N 个结点(双指针应用)
  15. 【在表格下方创建“添加”按钮,完成添加用户信息,点击后自动添加等功能】
  16. 打造山寨手机中的App Store--斯凯MiniJ(mrp)诞生记
  17. OPPO R9s线刷包_OPPO R9s刷机包_线刷救砖
  18. JS笔记(前端小灰狼)
  19. 解决位图失真-SetStretchBltMode
  20. 毛书卿3.24纸白银原油今晚行情涨跌独家分析-黄金操作指导

热门文章

  1. qthread run结束了算销毁吗_对 精致码农大佬 说的 Task.Run 会存在 内存泄漏 的思考...
  2. 毛玻璃效果 php,CSS3如何实现磨砂玻璃背景效果
  3. Hibernate 原生SQL多表查询时-字段名相同-查询数据覆盖问题
  4. git commit --amend用法(摘抄)
  5. SqlServer2012 File Table文件表
  6. 剑指Offer_47_求1+2+3+...+n
  7. 【Android】Fresco图片加载框架(二)————Producer
  8. #includealgorithm里的函数
  9. JVM分代垃圾回收策略的基础概念
  10. 项目管理-让什么人做什么事