标签: broken-pipe

破管不再结束程序?

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

$> do_something_intensive | less
Run Code Online (Sandbox Code Playgroud)

然后退出较少用于立即返回到SuSE8或以前版本的响应shell.当我今天尝试时,do_something_intensive显然仍在运行,直到我手动杀死它.似乎某些事情发生了变化(glib?shell?),这使得程序忽略了"破碎的管道"......

你们中的任何人都有这方面的暗示吗?如何恢复以前的行为?为什么它已被改变(或为什么它总是存在多个语义)?

编辑:进一步测试(使用strace的)揭示了"SIGPIPE" 生成,但该程序不被中断.一个简单的

#include <stdio.h>
int main() 
{
   while(1) printf("dumb test\n");
   exit(0);
}
Run Code Online (Sandbox Code Playgroud)

将继续无止境

--- SIGPIPE (Broken pipe) @ 0 (0) ---
write(1, "dumb test\ndumb test\ndumb test\ndu"..., 1024) = -1 EPIPE (Broken pipe)
Run Code Online (Sandbox Code Playgroud)

被杀害.我可以肯定在我的程序中编写一个信号处理程序并确保它终止,但我更需要一些环境变量或shell选项来强制程序在SIGPIPE上终止

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

linux shell broken-pipe tcsh

5
推荐指数
2
解决办法
6958
查看次数

写入响应时会抛出org.mortbay.jetty.EofException

我在eclipse RAP(Rich Ajax Platform 1.3.2)和Java 1.5版中使用jetty 6.1.23.我正在向浏览器发送PNG图像.这些是造成麻烦的代码:

服务器端:

response.setContentType(application.getMimeType(".png"));
response.setContentLength(outputSize);
response.setHeader("Cache-Control", "no-cache"); 
response.setDateHeader("Expires", 0);
response.setHeader("Pragma", "no-cache");
response.setDateHeader("Max-Age", 0); 
ServletOutputStream servletoutputstream = response.getOutputStream();

servletoutputstream.write(imageBytes); // this throws EofException

servletoutputstream.flush();
Run Code Online (Sandbox Code Playgroud)

客户端:

<img src="path to the servlet that is loading the image">
Run Code Online (Sandbox Code Playgroud)

奇怪的是,这个问题不会一直发生.在我们搬到生产后,它会间歇性地发生.我们的测试环境没有问题.生产和我们的测试环境之间的唯一区别是,在生产环境中,用户远离我们的服务器,而在测试环境中,他们非常接近.

抛出异常时,客户端的浏览器端根本不会显示图像!到底是怎么回事?我该怎么做才能解决它或者至少有一个解决方法?

这是完整的异常跟踪(我强调了关键异常):

08 Feb 2012 11:49:08,955 ERROR [1584291438@qtp-2135195460-260] plugin.sda - 
org.mortbay.jetty.EofException
    at org.mortbay.jetty.HttpGenerator.flush(HttpGenerator.java:789)
    at org.mortbay.jetty.AbstractGenerator$Output.flush(AbstractGenerator.java:568)
    at org.mortbay.jetty.HttpConnection$Output.flush(HttpConnection.java:1006)
    at org.mortbay.jetty.AbstractGenerator$Output.write(AbstractGenerator.java:650)
    at org.mortbay.jetty.AbstractGenerator$Output.write(AbstractGenerator.java:590)
    at com.scotiabank.ebss.common.viewer.util.ViewerUtil.sendBytes(ViewerUtil.java:533)
    at com.scotiabank.ebss.common.viewer.servlets.ViewerServlet.doGet(ViewerServlet.java:242)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:707)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
    at org.eclipse.equinox.http.registry.internal.ServletManager$ServletWrapper.service(ServletManager.java:180)
    at org.eclipse.equinox.http.servlet.internal.ServletRegistration.service(ServletRegistration.java:61)
    at org.eclipse.equinox.http.servlet.internal.ProxyServlet.processAlias(ProxyServlet.java:126)
    at org.eclipse.equinox.http.servlet.internal.ProxyServlet.service(ProxyServlet.java:60)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
    at …
Run Code Online (Sandbox Code Playgroud)

java networking jetty broken-pipe

5
推荐指数
1
解决办法
9891
查看次数

Broken Pipe 和 Connection reset by peer 有什么区别?

在我的日常工作中,我需要通过SSH保持连接以断开服务器,我通常会遇到两种不同的错误,第一种是“Broken Pipe”,第二种是“Connection reset by peer”。

我想知道这两组错误有什么区别?

networking broken-pipe connection-reset

5
推荐指数
1
解决办法
2384
查看次数

当我在 ssh 上收到“管道损坏”错误时,EC2 实例中的进程会发生什么情况?

我正在使用一些 EC2 实例来运行一些无法在本地运行的大型作业。我看到的问题是,一段时间后(进程启动后 X 小时),我的 shell 上的连接出现了管道损坏错误

ubuntu@ip-10-122-xxx-xxx:~/stratto/ode$ Write failed: Broken pipe
Run Code Online (Sandbox Code Playgroud)

该实例仍然存在,因为我可以毫无问题地重新连接,但如何重新连接并返回查看“损坏的管道”之前的进程日志

非常感谢任何提示,谢谢!

ssh broken-pipe amazon-ec2

5
推荐指数
1
解决办法
4427
查看次数

什么是破损管道错误?

在python中运行代码,我发现了一个"Broken Pipe Error".可有人请向我解释这是什么简单

谢谢.

python broken-pipe

5
推荐指数
1
解决办法
5956
查看次数

训练 Keras 模型时管道破裂

我正在使用 userdocker 在远程服务器上一个接一个地训练几个 Keras 模型。我通过 ssh 连接到服务器,让它们在不同的屏幕上运行。

为了加快速度,我在 5 个 GPU 上训练模型,以便同时训练 5 个不同的模型。

大多数情况下,模型训练没有任何问题:我分离屏幕,从服务器注销并让它们运行一夜。然而,有时他们会在培训过程中因管道破裂消息而停止。下面我包含了消息的最后一部分,因为我认为它可能是最相关的,但它很长且重复。

我发现这个问题有一个稍微相似的错误消息,他们链接到这个解释,但我看不出如何在我的情况下修复它,或者我在我的代码中犯了可能导致这个问题的错误并不总是发生。

有没有人在使用 Keras 或 userdocker 时遇到过类似的问题?怎样才能防止它发生?

错误信息


23/24 [==========================>..] - ETA:7s - 损失:1.7797 - acc:0.2219 Traceback(大多数最近调用最后一次):
文件“/usr/local/lib/python2.7/dist-packages/keras/utils/data_utils.py”,第 655 行,在 _data_generator_task self.queue.put((True, generator_output))
文件中",第 2 行,放入
文件 "/usr/lib/python2.7/multiprocessing/managers.py",第 759 行,在 _callmethod 类型中,结果 = conn.recv() EOFError

进程 Process-259:回溯(最近一次调用):
文件“/usr/lib/python2.7/multiprocessing/process.py”,第 258 行,在 _bootstrap self.run()
文件“/usr/lib/python2. 7/multiprocessing/process.py", line 114, in run self._target(*self._args, **self._kwargs)
File "/usr/local/lib/python2.7/dist-packages/keras/utils/ data_utils.py”,第 665 行,在 _data_generator_task self.queue.put((False, e))
文件“”,第 2 行,输入文件“/usr/lib/python2.7/multiprocessing/managers.py”,行758, in …

python gnu-screen broken-pipe docker keras

5
推荐指数
0
解决办法
946
查看次数

ALSA:无法从欠载中恢复,准备失败:管道损坏

我正在编写一个程序,从两个单声道 ALSA 设备读取并将它们写入一个立体声 ALSA 设备。

我使用三个线程和乒乓缓冲区来管理它们。两个阅读线程和一个写作线程。它们的配置如下:

// Capture ALSA device 
alsaBufferSize = 16384;
alsaCaptureChunkSize = 4096;
bitsPerSample = 16;
samplingFrequency = 24000;
numOfChannels = 1;
block = true;
accessType = SND_PCM_ACCESS_RW_INTERLEAVED;

// Playback device (only list params that are different from above)
alsaBufferSize = 16384 * 2;
numOfChannels = 2;
accessType = SND_PCM_ACCESS_RW_NON_INTERLEAVED;
Run Code Online (Sandbox Code Playgroud)

两个读取线程将写入 ping 缓冲区,然后写入 pong 缓冲区。写入线程将等待两个缓冲区中的任何一个准备好,锁定它,读取它,然后解锁它。

但是当我运行这个程序时,出现xrun并且无法恢复。

ALSA lib pcm.c:7316:(snd_pcm_recover) underrun occurred
ALSA lib pcm.c:7319:(snd_pcm_recover) cannot recovery from underrun, prepare failed: Broken pipe
Run Code Online (Sandbox Code Playgroud)

下面是我写入 ALSA 播放设备的代码:

bool CALSAWriter::writen(uint8_t** …
Run Code Online (Sandbox Code Playgroud)

c++ multithreading broken-pipe alsa

4
推荐指数
1
解决办法
6449
查看次数

Peewee MySQL服务器已经消失

我用烧瓶和小便.有时peewee会抛出这个错误

MySQL server has gone away (error(32, 'Broken pipe'))
Run Code Online (Sandbox Code Playgroud)

Peewee数据库连接

db = PooledMySQLDatabase(database,**{
            "passwd": password, "user": user,
            "max_connections":None,"stale_timeout":None,
            "threadlocals" : True
        })

@app.before_request
def before_request():
    db.connect()

@app.teardown_request
def teardown_request(exception):
    db.close()
Run Code Online (Sandbox Code Playgroud)

在mysql错误"MySQL服务器已经消失(错误(32,'Broken pipe'))"之后,选择查询工作没有问题,但插入,更新,删除查询不起作用.

在插入,更新,删除查询后面工作(在mysql中)但是peewee抛出这个错误.

(2006, "MySQL server has gone away (error(32, 'Broken pipe'))")
Run Code Online (Sandbox Code Playgroud)

python mysql broken-pipe flask peewee

4
推荐指数
1
解决办法
4046
查看次数

断管错误 Python 子进程

我正在尝试从基于 GUI 的软件启动几个 bash 例程。我面临的问题是管道问题。这里是测试 bash 脚本(bashScriptTest.sh):

#!/bin/bash
#---------- Working
ls | sort | grep d > testFile.txt
cat testFile.txt
#---------- NOT working
echo $RANDOM > testFile2.txt
for i in `seq 1 15000`; do
    echo $RANDOM >> testFile2.txt
done
awk '{print $1}' testFile2.txt | sort -g | head -1
Run Code Online (Sandbox Code Playgroud)

这里是创建错误的python脚本:

import subprocess
#
with open('log.txt','w') as outfile:
    CLEAN=subprocess.Popen("./bashScriptTest.sh", stdout=outfile, stderr=outfile)
    print CLEAN.pid
    OUTSEE=subprocess.Popen(['x-terminal-emulator', '-e','tail -f '+outfile.name])
Run Code Online (Sandbox Code Playgroud)

从运行 python 脚本可以看出,Broken-pipe 错误不是在前三个管道(第一行)中遇到的,而是在 awk 完成大量工作之后遇到的。我需要在 bash 中管理大量的例程和子例程,并且使用 shell==True 标志不会改变任何事情。我试图以最 Pythonic 的方式编写所有内容,但不幸的是,我没有机会重写 …

python bash shell subprocess broken-pipe

4
推荐指数
1
解决办法
3592
查看次数

为什么我很少得到"cat:写错误:断管",而不是总是如此

我正在运行一些脚本,在几个地方,我正在运行用grep管道化的猫,如:

cat file.txt | grep "pattern"
Run Code Online (Sandbox Code Playgroud)

大多数时候都没有问题.但有时我会得到

cat:写错误:管道坏了

那么如何找出导致此问题的cat命令以及原因?

linux bash grep broken-pipe cat

4
推荐指数
1
解决办法
7141
查看次数