问题标签 [sigpipe]

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 投票
1 回答
941 浏览

unix - 在多线程Linux程序中忽略/阻止SIGPIPE信号

我有以下情况: 线程1:分叉一个孩子和孩子,说A反过来又分叉并执行一个进程。乙

线程 2:通过 Unix 域套接字侦听命令并终止进程,B 已被子进程分叉,线程 1 中的 A 响应调用者它已终止子进程

我想忽略线程 2 的 SIGPIPE,因为我不希望程序在客户端关闭套接字时崩溃。所以我尝试使用

这样做有助于阻止 SIGPIPE,但它也会阻止线程 1 向子进程发送 SIGKILL 的能力。

在创建线程之前,我还尝试在 main 函数中使用以下内容

并在套接字中使用 MSG_NOSIGNAL 标志发送。

这对我的 SIGKILL 方案也没有帮助。任何想法如何在像上面这样的多线程条件下安全地忽略 SIGPIPE,并发送了 fork 和 exec 以及 SIGKILLs?

0 投票
1 回答
5685 浏览

uwsgi - 这个 UWSGI 错误是什么意思?" SIGPIPE: 写入已关闭的管道/套接字/fd "

有几个与此问题相关的问题,但没有一个能真正帮助我理解发生了什么。

完整的错误:

0 投票
2 回答
1302 浏览

snakemake - 在snakemake中处理SIGPIPE错误

以下蛇形脚本:

失败并出现以下错误:

解释返回非零退出状态 141似乎是说snakemake已经捕获了 SIGPIPE 发送的失败head。我想严格来说,snakemake 在捕捉失败方面做的是正确的事情,但我想知道是否有可能忽略像这样的某些类型的错误。我有一个使用该head命令的蛇形脚本,我正在尝试找到解决此错误的方法。

0 投票
1 回答
825 浏览

python - Python subprocess.Popen PIPE 和 SIGPIPE

当我浏览帖子时,我在这里遇到了这个例子,据说proc1.stdout.close()需要调用适当的退出proc1,生成SIGPIPE

但是,我不清楚这一点。请修正我的理解。

  1. SIGPIPE当 aPIPE尝试写入 closed时发生PIPE
  2. 作家PIPEproc1stdout,读者PIPEproc2stdin
  3. proc1退出时将proc2退出并proc1尝试将数据写入proc2's stdin PIPE。因为
    • proc2退出时stdin PIPE关闭proc2
    • SIGPIPE发生在,proc1因为proc1尝试写入已关闭proc2stdin PIPE.

据我了解,无论收盘如何,SIGPIPE都会发生并退出。proc1proc1stdout

我想念什么?


编辑

从@unutbu 的评论中阅读帖子后......

我认为复制的文件描述符(proc1.stdout)是写入器管道,而不是读取器管道。因此,有两个写入器 PIPE 和一个读取器 PIPE 相互连接。

因此,SIGPIPE将在proc2退出时生成,因为proc2只有一个具有阅读器管道的进程(退出时将关闭proc2)。

但是,上面的帖子似乎说通过复制有两个阅读器 PIPE,proc1.stdout因此SIGPIPE即使退出后也不会生成,proc2因为还有另一个阅读器 PIPE 打开。以下是帖子的一部分。

因此,通过立即关闭 p1.stdout,您可以确保从 dmesg stdout 读取的唯一剩余文件句柄是 grep 进程,如果该进程退出,dmesg 会收到 SIGPIPE。

我并不是说这个帖子是错误的,但我只是想修正我的理解。先感谢您。

0 投票
2 回答
760 浏览

c - C-Socket 的断管。如何只保持服务器运行?

在一个简单的程序中,我试图将命令行输入从客户端发送到服务器,我不断得到服务器端的“Broken Pipe”。我向服务器发送一个字符串,服务器将字符串以小写形式返回给客户端。

服务器:

客户

我发现的问题是,当客户端完成发送字符串时,命令行输入不像fgets()循环将等待另一个用户输入那样工作。如果我if(1)将客户端的 in 更改为 a while(1),它显然会运行一个无限循环,因为没有添加新的输入。困境是,在客户端处理来自命令行的单个请求时,我如何能够保持服务器端运行以不断地将字符串返回给客户端?

0 投票
2 回答
135 浏览

bash - 将命令的输出通过管道传输到“:”命令

我正在更新一个旧脚本,遇到了一个我不熟悉的模式:

我只在叉子炸弹示例中看到过这种模式。如果有人问我如何完成评论中所述的内容,我会建议:

在我把这归结为一个错字之前,有没有人见过这种模式并能够解释它的用例?

0 投票
1 回答
204 浏览

c - 在 Linux 上处理多线程损坏管道案例的服务器端套接字最佳实践是什么?

考虑到在 Linux 上是 C 语言的新手,我已经完成了套接字编程场景,在这些场景中你必须处理 SIGPIPE 问题并且我遇到了以下情况:
1- 捕获进程的 sigaction 然后继续,这等于忽略信号。

2-忽略线程使用的信号



- 现在一切正常,但我需要关于此测试用例行为的答案:

1- 服务器接受来自用户 A 的套接字,文件描述符为 int 7
2- 我运行冗长的 SQL 语句,需要 25 秒
3- 在 20 秒时客户端关闭套接字
4- 在 21 秒 Linux 内核发送了 SIGPIPE
5- 在 22 秒进程忽略了 SIGPIPE 并继续使用文件描述符 7,因为没有任何信号出现任何问题
6- 在 23 秒服务器接受来自用户 B 的套接字,文件描述符为 int 7 , 再次!
7- 用户 B 授权需要 2 秒,在用户 A 的 25 秒完成。
8-核心问题开始在第二个 25 写入(file_dsciptor,缓冲区,缓冲区大小);来自两个线程的数据都将写入用户 A 和用户 B 通道
9- 碰巧用户 B 无权登录服务器,但在服务器关闭线程 B 的文件描述符 7 之前,客户端 A 的线程 A 写入文件描述符 7 和由于套接字文件描述符 7 的重用,客户端 B 收到了重要数据!

我的问题
是,这种情况是错误的并且永远不会发生吗?
还是有可能发生,但有正确的方法可以应用?
并且是否有一个 C 系统调用函数来停止通过套接字连接重用 file_discriptor?
或者应该做些什么来确保打开的频道不会与另一个频道冲突,比如我猜的唯一文件描述符?

0 投票
0 回答
82 浏览

objective-c - 忽略通知服务扩展目标 C 中的 SIGPIPE

我有一个带有通知服务扩展的信使应用程序,用于处理通知并运行AFHTTPSessionManager服务。当我收到第一个通知时,我收到一个 SIGPIPE 错误并且扩展程序崩溃并且我丢失了通知中心的所有通知。

如何在通知服务扩展中忽略 SIGPIPE?

如何使用信号(sigpipe sig_ign)?

SIGPIPE 错误

0 投票
0 回答
61 浏览

python - Python subprocess.run CalledProcessError 在运行 rsh 时

我在远程机器上运行一个脚本:

该命令总是在远程机器上成功运行,但是一旦它在远程机器上完成,我就会得到一个 CalledProcessError

这种行为是不一致的,并且不会每次都发生(其他时候子进程会按预期退出而没有任何异常)。我想知道这里可能是什么问题,以及如何解决它?

0 投票
0 回答
1092 浏览

subprocess - subprocess.CalledProcessError 死于

我正在使用带有 python 子处理命令的 python 包。当我并行 qsub 几个作业时,它显示错误: subprocess.CalledProcessError: dead with

有什么好的建议吗?