linux信号函数总结
来源:互联网 发布:unity3d 多线程渲染 编辑:程序博客网 时间:2024/06/15 01:46
信号相关的事件和状态
产生信号:
1. 按键产生,如:Ctrl+c、Ctrl+z、Ctrl+\
2. 系统调用产生,如:kill、raise、abort
3. 软件条件产生,如:定时器alarm
4. 硬件异常产生,如:非法访问内存(段错误)、除0(浮点数例外)、内存对齐出错(总线错误)
5. 命令产生,如:kill命令
递达:递送并且到达进程。
未决:产生和递达之间的状态。主要由于阻塞(屏蔽)导致该状态。
信号的处理方式:
1. 执行默认动作
2. 忽略(丢弃)
3. 捕捉(调用户处理函数)
typedef void(*sighandler_t)(int);
sighandler_t signal(int signum, sighandler_t handler);
功能:注册一个信号捕捉函数
参数:
signum,信号值,尽量用宏。handler:信号注册函数
int sigaction(int signum, const struct sigaction *act, struct sigaction *oldact);
功能:修改信号处理动作(通常在Linux用其来注册一个信号的捕捉函数),可以给用信号捕捉函数传参数
成功:0;失败:-1,设置errno
参数:
act:传入参数,新的处理方式。
oldact:传出参数,旧的处理方式。struct sigaction结构体
structsigaction {
void (*sa_handler)(int);
void (*sa_sigaction)(int,siginfo_t *, void *);
sigset_t sa_mask;
int sa_flags;
void (*sa_restorer)(void);
};
sa_restorer: 该元素是过时的,不应该使用,
sa_sigaction:当sa_flags被指定为SA_SIGINFO标志时,使用该信号处理程序。(很少使用)
主要参数:
① sa_handler:指定信号捕捉后的处理函数名(即注册函数)。也可赋值为SIG_IGN表忽略或 SIG_DFL表执行默认动作
② sa_mask: 调用信号处理函数时,所要屏蔽的信号集合(信号屏蔽字)。注意:仅在处理函数被调用期间屏蔽生效,是临时性设置。
③ sa_flags:通常设置为0,表使用默认属性intkill(pid_t pid, int sig);
功能:给指定进程发送信号
成功:0;失败:-1 (ID非法,信号非法,普通用户杀init进程等权级问题),设置errno
sig:不推荐直接使用数字,应使用宏名,因为不同操作系统信号编号可能不同,但名称一致
pid > 0: 发送信号给指定的进程。
pid = 0: 发送信号给 与调用kill函数进程属于同一进程组的所有进程。
pid < 0: 取|pid|发给对应进程组
pid = -1:发送给进程有权限发送的系统中所有进程、
注意:
权限保护:super用户(root)可以发送信号给任意用户,普通用户是不能向系统用户发送信号的。 kill -9 (root用户的pid) 是不可以的。同样,普通用户也不能向其他普通用户发送信号,终止其进程。只能向自己创建的进程发送信号。普通用户基本规则是:发送者实际或有效用户ID == 接收者实际或有效用户ID
int sigqueue(pid_t pid, int sig, const union sigval value);
功能:给指定进程发送信号,发送信号时可以传参数
成功:0;失败:-1,设置errno
union sigval {
int sival_int;
void *sival_ptr;
};
- linux信号函数总结
- QLineEdit 信号函数总结
- linux 信号学习总结
- linux信号通信总结
- linux 多线程信号总结
- linux多线程信号总结
- linux多线程信号总结
- linux多线程信号总结
- linux多线程信号总结
- linux 多线程信号总结
- linux多线程信号总结
- linux 多线程信号总结
- linux多线程信号总结
- linux信号总结
- Linux信号总结
- linux多线程信号总结
- linux信号总结
- linux 多线程信号总结
- JavaWeb工程中web.xml基本配置
- kafka demo
- Retrofit2.0源码解析
- apk,task,android:process与android:sharedUserId的区别
- pthread多线程编程详细解析----条件变量 pthread_mutex_t
- linux信号函数总结
- wps怎么显示左侧目录树
- Dom4j解析XML笔记
- ListCtrl的消息响应&MFC基础
- 不同项目之间的通信
- 卸载rasing,瑞星
- matlab随机函数的种子状态的保存与恢复
- noVNC+VNCserver实现远程访问docker容器桌面
- (个人)AR电子书系统创新实训第二周(1)