问题标签 [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.
unix - 在多线程Linux程序中忽略/阻止SIGPIPE信号
我有以下情况: 线程1:分叉一个孩子和孩子,说A反过来又分叉并执行一个进程。乙
线程 2:通过 Unix 域套接字侦听命令并终止进程,B 已被子进程分叉,线程 1 中的 A 响应调用者它已终止子进程
我想忽略线程 2 的 SIGPIPE,因为我不希望程序在客户端关闭套接字时崩溃。所以我尝试使用
这样做有助于阻止 SIGPIPE,但它也会阻止线程 1 向子进程发送 SIGKILL 的能力。
在创建线程之前,我还尝试在 main 函数中使用以下内容
并在套接字中使用 MSG_NOSIGNAL 标志发送。
这对我的 SIGKILL 方案也没有帮助。任何想法如何在像上面这样的多线程条件下安全地忽略 SIGPIPE,并发送了 fork 和 exec 以及 SIGKILLs?
uwsgi - 这个 UWSGI 错误是什么意思?" SIGPIPE: 写入已关闭的管道/套接字/fd "
有几个与此问题相关的问题,但没有一个能真正帮助我理解发生了什么。
完整的错误:
snakemake - 在snakemake中处理SIGPIPE错误
以下蛇形脚本:
失败并出现以下错误:
解释返回非零退出状态 141似乎是说snakemake已经捕获了 SIGPIPE 发送的失败head
。我想严格来说,snakemake 在捕捉失败方面做的是正确的事情,但我想知道是否有可能忽略像这样的某些类型的错误。我有一个使用该head
命令的蛇形脚本,我正在尝试找到解决此错误的方法。
python - Python subprocess.Popen PIPE 和 SIGPIPE
当我浏览帖子时,我在这里遇到了这个例子,据说proc1.stdout.close()
需要调用适当的退出proc1
,生成SIGPIPE
。
但是,我不清楚这一点。请修正我的理解。
SIGPIPE
当 aPIPE
尝试写入 closed时发生PIPE
。- 作家
PIPE
是proc1
的stdout
,读者PIPE
是proc2
的stdin
。 proc1
退出时将proc2
退出并proc1
尝试将数据写入proc2
'sstdin PIPE
。因为proc2
退出时stdin PIPE
关闭proc2
SIGPIPE
发生在,proc1
因为proc1
尝试写入已关闭proc2
的stdin PIPE
.
据我了解,无论收盘如何,SIGPIPE
都会发生并退出。proc1
proc1
stdout
我想念什么?
编辑
从@unutbu 的评论中阅读帖子后......
我认为复制的文件描述符(proc1.stdout
)是写入器管道,而不是读取器管道。因此,有两个写入器 PIPE 和一个读取器 PIPE 相互连接。
因此,SIGPIPE
将在proc2
退出时生成,因为proc2
只有一个具有阅读器管道的进程(退出时将关闭proc2
)。
但是,上面的帖子似乎说通过复制有两个阅读器 PIPE,proc1.stdout
因此SIGPIPE
即使退出后也不会生成,proc2
因为还有另一个阅读器 PIPE 打开。以下是帖子的一部分。
因此,通过立即关闭 p1.stdout,您可以确保从 dmesg stdout 读取的唯一剩余文件句柄是 grep 进程,如果该进程退出,dmesg 会收到 SIGPIPE。
我并不是说这个帖子是错误的,但我只是想修正我的理解。先感谢您。
c - C-Socket 的断管。如何只保持服务器运行?
在一个简单的程序中,我试图将命令行输入从客户端发送到服务器,我不断得到服务器端的“Broken Pipe”。我向服务器发送一个字符串,服务器将字符串以小写形式返回给客户端。
服务器:
客户
我发现的问题是,当客户端完成发送字符串时,命令行输入不像fgets()
循环将等待另一个用户输入那样工作。如果我if(1)
将客户端的 in 更改为 a while(1)
,它显然会运行一个无限循环,因为没有添加新的输入。困境是,在客户端处理来自命令行的单个请求时,我如何能够保持服务器端运行以不断地将字符串返回给客户端?
bash - 将命令的输出通过管道传输到“:”命令
我正在更新一个旧脚本,遇到了一个我不熟悉的模式:
我只在叉子炸弹示例中看到过这种模式。如果有人问我如何完成评论中所述的内容,我会建议:
在我把这归结为一个错字之前,有没有人见过这种模式并能够解释它的用例?
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?
或者应该做些什么来确保打开的频道不会与另一个频道冲突,比如我猜的唯一文件描述符?
python - Python subprocess.run CalledProcessError 在运行 rsh 时
我在远程机器上运行一个脚本:
该命令总是在远程机器上成功运行,但是一旦它在远程机器上完成,我就会得到一个 CalledProcessError
这种行为是不一致的,并且不会每次都发生(其他时候子进程会按预期退出而没有任何异常)。我想知道这里可能是什么问题,以及如何解决它?
subprocess - subprocess.CalledProcessError 死于
我正在使用带有 python 子处理命令的 python 包。当我并行 qsub 几个作业时,它显示错误: subprocess.CalledProcessError: dead with
有什么好的建议吗?