【问题标题】:Is it recommended to trap SIGPIPE in bash script?是否建议在 bash 脚本中捕获 SIGPIPE?
【发布时间】:2011-01-09 00:38:02
【问题描述】:

我在使用系统调用命令从 C++ 执行 bash 脚本时遇到问题。 该脚本捕获SIGPIPE 信号并以返回码141 退出。

这个问题已经开始出现在我的代码的最后一个版本中。

我的问题如下:

  1. 为什么这个 SIGPIPE 现在出现而以前没有出现?
  2. 忽略 SIGPIPE 是否安全?有什么后果?

【问题讨论】:

  • 能贴一些相关的代码sn-ps吗?
  • 正如答案中所解释的,某处有一个破损的管道,因此出现了SIPIPE 信号。这意味着您使用的逻辑有问题。你不应该忽视它。

标签: c++ c linux bash


【解决方案1】:

1) 如果不确切知道您所做的更改,这很难回答。
2) 如果一个命令序列出现在管道中,并且其中一个读取命令在写入器完成之前完成,写入器会收到一个 SIGPIPE 信号。因此,您是否可以忽略它取决于您的脚本是否可以接受这种行为。更多信息here

【讨论】:

    【解决方案2】:

    PiedPiper 链接到状态的current version of the FAQ

    从 bash-3.1 开始,bash 默认不报告 SIGPIPE 错误。你 可以构建一个会报告此类错误的 bash 版本。

    是否有可能您更改了 Bash 版本或其构建方式并导致代码中的行为发生变化?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-12-09
      • 1970-01-01
      • 2011-04-06
      • 1970-01-01
      • 1970-01-01
      • 2016-04-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多