总结《Linux高性能服务器编程》10-11章
Linux下,一个进程给其他进程发送信号的API是kill函数:
#include<sys/types.h>
#include<signal.h>
int kill(pid_t pid,int sig);//该函数把信号sig发送给目标进程pid
Linux下,目标进程收到信号时使用的信号处理函数原型
#include<signal.h>
typedef void(*__sighandler_t)(int);
#include<bits/signum.h>
#define SIG_DFL((__sighandler_t)0) //SIG_DFL表示使用信号的默认处理方式
#define SIG_IGN((__sighandler_t)1) //SIG_IGN表示忽略目标信号
要为一个信号设置处理函数,可以使用signal系统调用
#include<signal.h>
_sighandler_t signal(int sig,_sighandler_t_handler)
设置信号处理函数的更健壮的接口sigaction系统调用
#include<signal.h>
int sigaction(int sig, const struct sigaction* act, struct sigaction* oact);
#include<bits/sigset.h>
#define_SIGSET_NWORDS(1024/(8*sizeof(unsigned long int)))
typedef struct
{
unsigned long int__val[_SIGSET_NWORDS];
}__sigset_t;
#include<signal.h>
int sigemptyset(sigset_t*_set)/*清空信号集*/
int sigfillset(sigset_t*_set)/*在信号集中设置所有信号*/
int sigaddset(sigset_t*_set, int_signo)/*将信号_signo添加至信号集中*/
int sigdelset(sigset_t*_set, int_signo)/*将信号_signo从信号集中删除*/
int sigismember(_const sigset_t*_set, int_signo)/*测试_signo是否在信号集中*/
以指定哪些信号不能发送给本进程;
可以利用sigaction结构体的sa_mask成员来设置进程的信号掩码;
可以用sigprocmask函数设置或查看进程的信号掩码;
#include<signal.h>
int sigprocmask(int how, const sigset_t * set, sigset_t * oset;
如果给进程发送一个被屏蔽的信号,则操作系统将该信号设置为进程的一个被挂起的信号;
取消对被挂起信号的屏蔽,则它能立即被进程接收到;
如下函数可以获得进程当前被挂起的信号集
#include<signal.h>
int sigpending(sigset_t*set);
代码清单10-1 统一事件源
用来设置socket接收数据超时时间和发送数据超时时间,仅对与数据接收和发送相关的socket专用系统调用有效;
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nLVWcGQn-1668427955689)(img/Linux高性能服务器编程/image-20221028192620558.png)]](https://1000bd.com/contentImg/2024/04/23/63ecc3885a894317.png)
代码清单11-1 设置connect超时时间
代码清单11-4 利用I/O复用系统调用定时