linux-sys_信号
来源:互联网 发布:程序员的简历怎么写 编辑:程序博客网 时间:2024/05/17 03:16
##信号编号
kill -l
##信号机制
man 7 signal
##信号产生的种类
ctrl + c SIGINT
ctrl + z SIGTSTP
ctrl + \ SIGQUIT
int kill(pid_t pid, int sig)
pid > 0
sig发送给ID为pid的进程
pid == 0
sig发送给与发送进程同组的所有进程
pid <
0
sig发送给组ID为|-pid|的进程,并且发送进程具有向其发送信号的权限
pid == -1
sig发送给发送进程有权限向他们发送信号的系统上的所有进程
sig为0时,用于检测,特定为pid进程是否存在,如不存在,返回-1。
进程处理信号行为:
1.默认处理动作(term、core、ign、stop、cont)
2.忽略
3.捕捉(用户自定义信号处理函数)
PCB里面有两个信号集:PEND未决信号集合、 Block阻塞信号集(信号屏蔽字)
递达态:信号产生并且被相应
未决态:信号产生,没有被相应
信号集处理函数:
sigset_t为信号集,可sizeof(sigset_t)察看
int sigemptyset(sigset_t *set)
int sigfillset(sigset_t *set)
int sigaddset(sigset_t *set, int signo)
int sigdelset(sigset_t *set, int signo)
int sigismember(const sigset_t *set, int signo)
调用函数sigprocmask可以读取或更改进程的信号屏蔽字。
#include <signal.h>
int sigprocmask(int how, const sigset_t *set, sigset_t *oset);
返回值:若成功则为0,若出错则为-1
how参数的含义
SIG_BLOCK
set包含了我们希望添加到当前信号屏蔽字的信号,相当于mask=mask|set
SIG_UNBLOCK set包含了我们希望从当前信号屏蔽字中解除阻塞的信号,相当于mask=mask&~set
SIG_SETMASK 设置当前信号屏蔽字为set所指向的值,相当于mask=set
#include <signal.h>
int sigpending(sigset_t *set);
sigpending读取当前进程的未决信号集,通过set参数传出。调用成功则返回0,出错则
返回-1。
#include <signal.h>
int sigaction(int signum, const struct sigaction *act,
struct sigaction *oldact);
struct sigaction 定义:
struct sigaction {
void (*sa_handler)(int);
void (*sa_sigaction)(int, siginfo_t *, void *);
sigset_t
{
int
void
sa_mask;
sa_flags;
(*sa_restorer)(void);
};
sa_handler : 早期的捕捉函数
sa_sigaction : 新添加的捕捉函数,可以传参 , 和sa_handler互斥,两者通过sa_flags选择采用哪种捕捉函数
sa_mask : 在执行捕捉函数时,设置阻塞其它信号,sa_mask | 进程阻塞信号集,退出捕捉函数后,还原回原有的
阻塞信号集
sa_flags :
SA_SIGINFO 或者 0
sa_restorer : 保留,已过时
C标准库信号处理函数
typedef void (*sighandler_t)(int)
sighandler_t signal(int signum, sighandler_t handler)
int system(const char *command)
集合fork,exec,wait一体
可重入和时序竞态的概念
- linux-sys_信号
- linux-sys_文件IO
- linux-sys_文件系统
- linux-sys_进程
- linux-sys_进程间通信(IPC)
- linux 信号&信号处理
- linux 信号&信号处理
- linux 信号&信号处理
- linux 信号 信号集
- linux信号--阻塞信号
- Linux信号
- linux信号
- Linux信号
- linux 信号
- linux 信号
- linux 信号
- Linux 信号
- linux信号
- 函数的定义与声明的区别
- Shiro动态修改权限
- Linux下网络相关结构体 struct netent
- E: 无法获得锁 /var/lib/dpkg/lock -open
- 线程池的一点理解
- linux-sys_信号
- OSPF笔记-4
- Deap : 遗传算法算法解决 背包问题
- 【ASP.NET】总结
- JavaScript框架之AngularJS学习——指令(二)
- k-近邻算法 手写识别系统
- Python学习笔记
- hihoCoder 1336:Matrix Sum(二维树状数组)
- <Qt>windows平台调用mplayer播放视频