本模块为处理信号,信号用管道进行通信,用epoll监听管道的读端0。写端1写入信号。
ret = socketpair(PF_UNIX, SOCK_STREAM, 0, m_pipefd);
//将m_pipefd创建一对互相连接着的socket描述符。
//每一个套接字既可以读也可以写。例如,可以往sv[0]中写,从sv[1]中读;或者从sv[1]中写,从sv[0]中读;
assert(ret != -1);
utils.setnonblocking(m_pipefd[1]);//写段非阻塞
utils.addfd(m_epollfd, m_pipefd[0], false, 0);//加入内核事件表,注册读事件
//m_pipe[1]用来收数据 m_pipefd[0]用来处理连接
//addsig为注册信号
utils.addsig(SIGPIPE, SIG_IGN);//客户端程序向服务器端程序发送了消息,然后关闭客户端(处于close状态),服务器端返回消息的时候就会收到内核给的SIGPIPE信号
utils.addsig(SIGALRM, utils.sig_handler, false);
//在定时器设置的超时时间到达后,调用alarm的进程将收到SIGALRM信号。
utils.addsig(SIGTERM, utils.sig_handler, false);
//SIGTERM是kill或killall命令发送到进程的默认信号。
信号注册
void Utils::addsig(int sig,void