相关疑难解决方法(0)

如何防止SIGPIPE(或正确处理它们)

我有一个小型服务器程序,它接受TCP或本地UNIX套接字上的连接,读取一个简单的命令,并根据命令发送一个回复.问题是客户端有时可能对答案没兴趣并且提前退出,因此写入该套接字将导致SIGPIPE并使我的服务器崩溃.什么是防止崩溃的最佳做法?有没有办法检查线的另一边是否还在读?(select()似乎在这里不起作用,因为它总是说套接字是可写的).或者我应该用处理程序捕获SIGPIPE并忽略它?

c io signals sigpipe broken-pipe

242
推荐指数
8
解决办法
19万
查看次数

为什么存在SIGPIPE?

根据我的理解,SIGPIPE只能作为a的结果发生write(),它可以(并且确实)返回-1并设置errnoEPIPE......那么为什么我们有额外的信号开销?我每次使用管道时都会忽略SIGPIPE并且从未感到任何痛苦,我是否遗漏了什么?

posix

90
推荐指数
4
解决办法
5万
查看次数

Python subprocess.Popen PIPE 和 SIGPIPE

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

import subprocess

proc1 = subprocess.Popen(['ps', 'cax'], stdout=subprocess.PIPE)
proc2 = subprocess.Popen(['grep', 'python'], stdin=proc1.stdout,
                         stdout=subprocess.PIPE, stderr=subprocess.PIPE)

proc1.stdout.close() # Allow proc1 to receive a SIGPIPE if proc2 exits.
out, err = proc2.communicate()
print('out: {0}'.format(out))
print('err: {0}'.format(err))
Run Code Online (Sandbox Code Playgroud)

但是,我并不清楚。请修正我的理解。

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

python linux subprocess pipe sigpipe

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

带有管道的子进程调用

我将如何在 python 中执行以下子进程命令?

$ ps aux|grep python

>>> subprocess.check_output(['ps', 'aux', 'grep', 'python']) ?
Run Code Online (Sandbox Code Playgroud)

python subprocess

0
推荐指数
1
解决办法
6446
查看次数

标签 统计

python ×2

sigpipe ×2

subprocess ×2

broken-pipe ×1

c ×1

io ×1

linux ×1

pipe ×1

posix ×1

signals ×1