问题标签 [broken-pipe]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
7546 浏览

linux - 断管不再结束程序?

当您管道两个进程并在管道的“输出”处终止一个进程时,第一个进程用于接收“Broken Pipe”信号,这通常也会终止它。例如跑步

然后在 SuSE8 或更早版本上退出less used 以立即将您返回到响应式 shell。当我今天尝试这样做时,do_something_intensive显然仍在运行,直到我手动将其杀死。似乎有些东西发生了变化(glib?shell?),使程序忽略“破管道”......

你们中有人对此有提示吗?如何恢复以前的行为?为什么它被改变了(或者为什么它总是存在多种语义)?

编辑:进一步的测试(使用 strace)显示生成了“SIGPIPE” ,但程序没有中断。一个简单的

将永无止境地继续下去

更少被杀死时。我可以肯定地在我的程序中编写一个信号处理程序并确保它终止,但我更多的是寻找一些环境变量或 shell 选项来强制程序在 SIGPIPE 上终止

再次编辑:这似乎是一个特定于 tcsh 的问题(bash 正确处理它)并且依赖于终端(Eterm 0.9.4)

0 投票
10 回答
221908 浏览

c - 如何防止 SIGPIPE(或正确处理)

我有一个小型服务器程序,它接受 TCP 或本地 UNIX 套接字上的连接,读取一个简单的命令并(取决于命令)发送回复。

问题是客户可能对答案不感兴趣,有时会提前退出。因此,写入该套接字将导致 aSIGPIPE并使我的服务器崩溃。

在这里防止崩溃的最佳做法是什么?有没有办法检查线路的另一端是否仍在阅读?(select()似乎在这里不起作用,因为它总是说套接字是可写的)。还是我应该SIGPIPE用处理程序捕获并忽略它?

0 投票
5 回答
92445 浏览

python - 如何在 python 中处理损坏的管道(SIGPIPE)?

我用 python 编写了一个简单的多线程游戏服务器,它为每个客户端连接创建一个新线程。我发现,由于管道/SIGPIPE 错误,服务器会时不时地崩溃。我很确定当程序尝试将响应发送回不再存在的客户端时会发生这种情况。

有什么好的方法来解决这个问题?我首选的解决方案是简单地关闭与客户端的服务器端连接并继续前进,而不是退出整个程序。

PS:这个问题/答案以通用的方式处理问题;我应该如何具体解决它?

0 投票
2 回答
1673 浏览

php - 从 PHP 调用 git:断管错误

我有以下 PHP 脚本:

我运行它的 10 次中大约有 7 次,git 给出以下错误:

如果我直接从 shell 运行等效命令,则永远不会发生此错误。

我已经尝试过:

  • 使用其他 PHP 执行函数:exec, system, popen;
  • 将整个命令作为参数传递给 bash,即exec('bash -c '.$cmd);

有谁知道会发生什么?

0 投票
2 回答
2201 浏览

c - 在 Solaris send() 调用中检测损坏的管道

在 solaris 中如何检测 send() 调用中损坏的套接字?我不想使用信号。
我尝试了 SO_NOSIGPIPE 和 MSG_NOSIGNAL 但两者在 Solaris 中都不可用,并且我的程序因“破管”错误而被杀死。

有什么方法可以检测到破损的管道吗?

谢谢!

0 投票
1 回答
1870 浏览

ruby-on-rails - 使用 memcached 在 Rails 中出现断管错误

我一直遇到这个错误MemCacheError (Broken pipe): Broken pipe on my Rails app,我不知道为什么。

当我通过我的控制器访问 memcached 时Rails.cache,前 1 或 2 次读/写似乎总是抛出损坏的管道错误。但是当我通过创建一个新对象来访问 memcached 时ActiveSupport::Cache::MemCacheStore.new,我似乎没有收到这个错误。

我还在另一个 ruby​​ 进程中访问 memcached,无论我访问 memcached 的方式如何,第一次读取总是有这个错误。我确实通过重试读取来解决问题,但 id 宁愿有一个更好的长期解决方案。

目前我唯一一次看到这个问题是在我重新启动 memcached 之后。我正在使用 Rails 2.3.5 和 memcached 1.4.4(我也尝试过使用 memcached 1.2.2)。

0 投票
6 回答
13051 浏览

django - Django + WebKit = 断管

我正在运行 Django 1.2 开发服务器,每当我使用 Chrome 或 Safari 从其中加载页面时,都会收到这些 Broken Pipe 错误消息。我的同事从他的开发服务器加载页面时也遇到了错误。我们在使用 Opera 或 Firefox 时没有这些错误。

谁能帮我吗?我要疯了!

0 投票
3 回答
5873 浏览

mysql - Ruby on Rails Errno::EPIPE 损坏的管道

我知道有很多人在网上发布此问题,但我一直无法找到解决方案。

我的网站超过 6-8 小时未被访问后,我收到 Errno::EPIPE。我读到它可能与 ruby​​-mysql 驱动程序有关,但还没有找到解决方案。这是完整的跟踪。我正在使用乘客和 mysql 在 apache 上的 rails 服务器上运行 ruby​​。谢谢您的帮助!!!

0 投票
2 回答
701 浏览

pdf-generation - 使用 mwlib 在 MediaWiki 中将大量文章呈现为 PDF 失败

我已经安装了 Mediawiki Collection Extension 和 mwlib 来将文章(或文章集合)呈现为 PDF。这对于单篇文章和最多包含 20 篇文章的集合非常有效。

当我渲染更大的集合时,解析页面中的百分比计数器(渲染成功时计数为 100%)停留在 1%。

查看 mwrender.log 我看到错误 32 - 管道损坏错误。搜索互联网发现错误 32 可能是由于接收进程(管道之后的部分)崩溃或没有响应造成的。

从这里开始就很难了。我应该在哪里寻找更多线索?会不会是与 MySQL 服务器的连接死了?

整个应用程序在交钥匙 Linux Mediawiki VM 上运行。

0 投票
4 回答
336181 浏览

c - 是什么导致了断管错误?

我知道当对等端的套接字关闭时,会引发损坏的管道错误。

但是,在我的测试中,我注意到当对等端关闭时,在这一端立即“发送”调用并不总是导致管道损坏错误。

例如:

在对等端关闭套接字后(我通过调用 close 尝试干净关闭,也通过杀死对等端尝试异常关闭),如果我尝试发送 40 个字节,那么我不会得到一个损坏的管道,但是,如果我尝试发送 40000 字节然后它立即给出损坏的管道错误。

究竟是什么原因导致管道破裂,它的行为可以预测吗?