社区
C语言
帖子详情
signal(SIGPIPE, SIG_IGN)方法设置一下,会永久起作用吗?
zhvfeng
2004-03-25 03:14:55
写了一个socket程序,开始没调用该方法,不起server,直接启动client端,则程序异常退出,打出Broken pipe.我在csdn上问了一下怎么样能捕到该错误,然后是client程序重新连接,有人说用signal(SIGPIPE, SIG_IGN),效果确实不错,程序不再自动退出.但是现在我注释掉了这个方法,怎么不像以前会自动退出了.是不是这个方法,是对操作系统而言的,只要我不重启机器,就一直这样了?
...全文
939
2
打赏
收藏
signal(SIGPIPE, SIG_IGN)方法设置一下,会永久起作用吗?
写了一个socket程序,开始没调用该方法,不起server,直接启动client端,则程序异常退出,打出Broken pipe.我在csdn上问了一下怎么样能捕到该错误,然后是client程序重新连接,有人说用signal(SIGPIPE, SIG_IGN),效果确实不错,程序不再自动退出.但是现在我注释掉了这个方法,怎么不像以前会自动退出了.是不是这个方法,是对操作系统而言的,只要我不重启机器,就一直这样了?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
2 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
zhvfeng
2004-03-25
打赏
举报
回复
真奇怪,我注释掉后,怎么运行都得不到原来的错误了.
liao2001
2004-03-25
打赏
举报
回复
只对于进程而言
sig
nal
(
SIG
PIPE
,
SIG
_
IGN
)
SIG
PIPE
信号处理 为什么程序里要写
sig
nal
(
SIG
PIPE
,
SIG
_
IGN
)这个呢? 找到一篇说这个内容的文章【
sig
nal
(
SIG
PIPE
,
SIG
_
IGN
)解析】
sig
nal
(
SIG
PIPE
,
SIG
_
IGN
)问题
sig
nal
(
SIG
PIPE
,
SIG
_
IGN
); 当服务器close一个连接时,若client端接着发数据。根据TCP协议的规定,
会
收到一个RST响应,client再往这个服务器发送数据 时,系统
会
发出一个
SIG
PIPE
信号给进程,告诉进程这个连接已经断开了,不要再写了。根据信号的默认处理规则
SIG
PIPE
信号的默认执行动作是 terminate(终止、退出), 所以client
会
退出。 若不想客户端退出可以把
SIG
PIPE
设为
SIG
_
IGN
如:
sig
nal
(
SIG
PIPE
,
SIG
_
IGN
)...
sig
nal
(
SIG
CHLD,
SIG
_
IGN
) 和
sig
nal
(
SIG
PIPE
,
SIG
_
IGN
) 使用场景
一、
sig
nal
(
SIG
CHLD,
SIG
_
IGN
); 因为并发服务器常常 fork 很多子进程,子进程终结之后需要服务器进程去 wait 清理资源。如果将此信号的处理方式设为忽略,可让内核把僵尸子进程转交给 init 进程去处理,省去了大量僵尸进程占用系统资源。(Linux Only) 对于某些进程,特别是服务器进程往往在请求到来时生成子进程处理请求。如果父进程不等待子进程结束,子进程将成为僵尸进程(zombie)从而占用系统资源。如果父进程等待子进程结束,将增加父进程的负担,影响服务器进程的并发性能
调用了
sig
nal
(
SIG
PIPE
,
SIG
_
IGN
)仍然出现Program received
sig
nal
SIG
PIPE
, Broken
pipe
.
问题 调用了
sig
nal
(
SIG
PIPE
,
SIG
_
IGN
)仍然出现Program received
sig
nal
SIG
PIPE
, Broken
pipe
. 解答 GDB调试网络程序时,
会
遇到
SIG
PIPE
信息,默认GDB
会
把程序停下来,即使程序使用
sig
nal
(
SIG
PIPE
,
SIG
_
IGN
);来忽略信号。 在gdb模式下运行下面的命令) handle
SIG
PIPE
nostop print 如果连信息提示都不想看见,可以这样
设置
: handle
SIG
PIPE
nostop noprint ..
sig
nal
(
SIG
PIPE
,
SIG
_
IGN
)与
sig
nal
(
SIG
CHLD,
SIG
_
IGN
)
sig
nal
(
SIG
PIPE
,
SIG
_
IGN
) 当服务器close一个连接时,若client端接着发数据。根据TCP协议的规定,
会
收到一个RST响应,client再往这个服务器发送数据 时,系统
会
发出一个
SIG
PIPE
信号给进程,告诉进程这个连接已经断开了,不要再写了。根据信号的默认处理规则
SIG
PIPE
信号的默认执行动作是 terminate(终止、退出), 所以client
会
退出。 若不想客户...
C语言
69,371
社区成员
243,080
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章