linux
文章平均质量分 66
double2li
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
linux下网络程序遭遇SIGPIPE的解决
问题描述:我的一个服务器程序, 在Windows下运行正常.但当在Linux(centos 6.3)下,进行对端未开启的异常测试时,出现莫名退出 . 最后跟踪到是write调用导致退出. 用gdb执行程序, 退出时提示"Broken pipe".问题分析:对一个对端已经关闭的socket调用两次write, 第二次将会生成SIGPIPE信号, 该信号默认结束进程.具体的分析可以结合TCP的”四次握手”关闭. TCP是全双工的信道, 可以看作两条单工信道, TCP连接两端的两个端点各.原创 2021-03-18 16:37:31 · 430 阅读 · 0 评论 -
linux sigaction 函数 用法释义
使用 sigaction 函数:signal 函数的使用方法简单,但并不属于 POSIX 标准,在各类 UNIX 平台上的实现不尽相同,因此其用途受到了一定的限制。而 POSIX 标准定义的信号处理接口是 sigaction 函数,其接口头文件及原型如下:#include <signal.h>int sigaction(int signum, const struct sigaction *act, struct sigaction *oldact);◆ signum...原创 2021-03-18 14:04:47 · 167 阅读 · 0 评论 -
linux 服务器至少需要忽略的几个信号
SIGCHLD,默认不处理,会产生僵尸进程,直到父进程退出,才被init 接受处理.服务器程序肯定不能随便退出,那么就会造成僵尸进程累积,僵尸进程会占用进程id,进程结束状态,进程运行时间等信信,会给系统造成负担,另外进程号是有限的,如果进程号耗尽那么,系统在也没办法产生新进程.SIGPIPE ,默认推出进程,网络通信的时候,客户端异常终止(比如说是 CTRL + C),父进程就会收到 PIPE 信号,没有忽略或捕捉的话默认退出进程.SIGHUP 终端关闭时候会产生此信号,默认处理是,退出进程.原创 2021-03-18 14:01:33 · 430 阅读 · 0 评论 -
服务器忽略SIGPIPE信号原因及方法
1.原因对一个对端已经关闭的socket调用两次write,第二次将会生成SIGPIPE信号, 该信号默认结束进程。具体的分析可以结合TCP关闭的”四次握手”。TCP是全双工的信道, 可以看作两条单工信道, TCP连接两端的两个端点各负责一条。当对端调用close时, 虽然本意是关闭整个两条信道,但本端只是收到FIN包。 按照TCP协议的语义, 表示对端只是关闭了其所负责的那一条单工信道, 仍然可以继续接收数据。 也就是说, 因为TCP协议的限制, 一个端点无法获知对端的socket是调用了clos原创 2021-03-18 13:58:53 · 1173 阅读 · 1 评论 -
linux 编程中忽略SIGPIPE信号
linux 编程中忽略SIGPIPE信号SIGPIPE简单来说,就是客户端程序向服务器端程序发送了消息,然后关闭客户端,服务器端返回消息的时候就会收到内核给的SIGPIPE信号。TCP的全双工信道其实是两条单工信道,client端调用close的时候,虽然本意是关闭两条信道,但是其实只能关闭它发送的那一条单工信道,还是可以接受数据,server端还是可以发送数据,并不知道client端已经完全关闭了。以下为引用:”’对一个已经收到FIN包的socket调用read方法, 如果接收缓冲已空, 则返回原创 2021-03-18 13:57:10 · 402 阅读 · 0 评论 -
Linuxc 信号的使用 sigqueue函数和sigaction函数
1.进程A向进程B发送SIGUSR1信号;2.进程B收到信号后,打印字符串“receive SIGUSR1”;3.要求用sigqueue函数和sigaction函数实现以上功能;源代码:sigqueue.c#include <stdio.h>#include <stdlib.h>#include <sys/types.h>#include <signal.h>#include <unistd.h>int ma...原创 2021-03-18 13:54:26 · 468 阅读 · 0 评论 -
linux 信号的捕捉和发送函数的简单使用
linux编程中会对信号进行操作,经常进行捕捉和发送;经常用到对信号的捕捉和发送函数有两对。1、比较简单的:kill()(用于发送信号)和signal()(用于捕捉信号)2、高级一些的:sigaction()(用于捕捉信号)和sigqueue()(用于发送信号)下面是简单的应用:siginfo_t{ int si_signo; /* Signal number */ int si_errno; /* An errno value */...原创 2021-03-18 13:52:51 · 285 阅读 · 2 评论
分享