linux信号信号处理功能
报警(设置发送闹钟的信号)相关函数信号,睡眠
#包含头文件
定义函数无符号整数警报(无符号int秒);
功能描述报警()是用来设置信号SIGALRM信号发送到当前进程的参数指定的秒数秒后,如果参数是0秒,闹钟设置前取消了,剩下的时间是返回。
如果时钟没有设置为返回0,返回值返回留在闹钟中的秒数。
例如#包括
#包括
空处理程序(){
printf(海伦);
}
主要()
{
int i;
(SIGALRM信号,处理程序);
报警(5);
对于(i = 1;i < 7;i + +){
printf(%d睡觉..n
睡眠(1);
}
}
执行睡眠1…
2睡眠…
3睡眠…
4睡眠…
5睡眠…
你好
6睡眠…
杀死(将信号传输到指定的进程)
相关函数升高,信号
#包含头文件
#包括
定义函数int杀(pid_t PID,int sig);
这个函数解释了可以用参数的符号来指定参数的过程:
PID > 0将信号传递给过程识别码为PID的过程。
PID = 0将信号发送到当前进程的同一进程组的所有进程。
PID=1将信号广播发送到系统中的所有进程。
PID < 0将信号传递给进程组标识码的所有进程是PID的绝对值。
由参数SIG表示的信号编号可以称为附录D。
返回值执行返回0,如果出现错误返回1。
错误代码einval参数SIG私生子
过程或过程的esrch PID参数指定的组不存在
eperm权限不足以发送信号到指定的进程
例如#包括
#包括
#包括
#包括
主要()
{
pid_t PID;
国际地位;
如果(!(PID =()){
printf(嗨,我是孩子的过程!;
睡眠(10);
返回;
}
别的{
printf(发送信号,子进程(%1)n
睡眠(1);
杀(PID,sigabrt);
等待(状态);
如果(wifsignaled(状态))
printf(智利的过程中接收信号为DN
}
}
对儿童进程执行森信号(3170)
嗨,我是孩子的过程!
子进程接收信号6
暂停(让进程暂停直到信号出现)
相关函数杀死,信号,睡眠
#包含头文件
定义暂停的函数(空);
函数表示暂停()将暂停当前进程(进入休眠状态),直到它被信号(信号)中断为止。
返回值只返回到- 1。
错误代码eintr有信号到达中断功能。
sigaction(查询或设置信号处理方式)
相关功能的信号,sigprocmask,sigpending,sigsuspend
#包含头文件
定义函数(int const int sigaction Signum,结构sigaction *行为,结构sigaction * oldact);
功能说明sigaction()根据指定的参数的正负号信号数集的信号处理功能,可以指定参数的正负号的所有信号和SIGSTOP外SIGKILL。
例如,参数结构sigaction定义如下
结构sigaction
{
void(* sa_handler)(int);
sigset_t sa_mask;
国际sa_flags;
(* sa_restorer)虚空(void);
}
sa_handler这个参数是信号的参数处理程序相同(),代表一种新的信号处理功能,和其他的含义是指()信号。
sa_mask用于预留信号指定的sa_mask暂时当信号处理。
sa_restorer不使用此参数。
sa_flags是用来建立信号处理等相关操作,和下面的值是可用的。
或运算(|组合)
a_nocldstop:如果该参数是SIGCHLD,那么孩子过程不通知家长暂停
当sa_oneshot / sa_resethand:呼吁新的信号处理功能,信号处理方法改为系统预设模式。
这sa_restart系统调用:由信号中断,将重新启动本身
sa_nomask / sa_nodefer:不注意信号的返回信号前处理。
如果参数oldact不是一个空指针,原始信号的处理方法将从结构sigaction返回。
返回值执行返回0,如果出现错误返回1。
错误代码einval参数的正负号是非法的,或试图拦截/ sigstopsigkill SIGKILL信号
-EFAULT参数的行为,这oldact指针地址无法访问。
eintr电话中断
例如#包括
#包括
无效show_handler(struct sigaction *法)
{
开关(法-> sa_flags)
{
案例sig_dfl:printf(默认actionn );休息;
案例sig_ign:printf(忽略signalN );休息;
默认值:printf(0x%3 XN
}
}
主要()
{
int i;
结构sigaction行为,oldact;
act.sa_handler = show_handler;
act.sa_flags = sa_oneshot | sa_nomask;
sigaction(SIGUSR1,行为,oldact);
对于(i = 5;i < 15;i +)
{
printf(sa_handler信号为2D = 。我);
sigaction(我空,oldact);
}
}
执行信号5 =默认动作sa_handler
信号6 =默认动作sa_handler
信号7 =默认动作sa_handler
信号8 =默认动作sa_handler
信号9 =默认动作sa_handler
信号10 = 0x8048400 sa_handler
信号11 =默认动作sa_handler
信号12 =默认动作sa_handler
信号13 =默认动作sa_handler
信号14 =默认动作sa_handler
Sigaddset(增加一个信号到信号集)
相关函数sigemptyset,sigfillset,sigdelset,sigismember
#包含头文件
定义函数int sigaddset(sigset_t *,int Signum);
功能说明sigaddset()用来增加信号的参数符号表示成参数设置信号集。
返回值执行返回0,如果出现错误返回1。
错误代码-EFAULT参数设定指针地址无法访问
einval参数符号非法信号数
Sigdelset(从信号设置删除信号)
相关函数sigemptyset,sigfillset,sigaddset,sigismember
#包含头文件
定义函数int sigdelset(sigset_t *,int Signum);
功能说明sigdelset()用来删除信号所代表的参数设置信号参数的符号集。
返回值执行返回0,如果出现错误返回1。
错误代码-EFAULT参数设定指针地址无法访问
einval参数符号非法信号数
Sigemptyset(初始化信号集)
相关函数sigaddset,sigfillset,sigdelset,sigismember
#包含头文件
定义函数int sigemptyset(sigset_t *集);
功能说明sigemptyset()用于初始化参数设置和明确的信号。
返回值执行返回0,如果出现错误返回1。
错误代码-EFAULT参数设定指针地址无法访问
Sigfillset(所有的信号加入信号集)
相关函数sigempty,sigaddset,sigdelset,sigismember
#包含头文件
定义函数int sigfillset(sigset_t *集);
功能说明sigfillset()用于初始化参数设置信号集,然后把信号给信号设置。
返回值执行返回0,如果出现错误返回1。
附加说明:-EFAULT参数设定指针地址无法访问
sigismember(测试信号被加到信号集)
相关函数sigemptyset,sigfillset,sigaddset,sigdelset
#包含头文件
定义函数int sigismember(const sigset_t *,int Signum);
功能说明sigismember()是用来测试是否通过参数的正负号表示的信号已被添加到参数设置信号。如果信号已在,信号返回1,否则返回0。
返回值信号集具有返回的信号1,且不返回0。如果出现错误,返回到1。
错误代码-EFAULT参数设定指针地址无法访问
einval参数符号非法信号数
信号(设置信号处理模式)
相关函数sigaction,杀死,提高
#包含头文件
定义函数void(*信号(int Signum,无效(*处理)(int)))(int);
功能指示信号()根据指定的参数的正负号信号数集的信号处理功能,当指定的信号时,它就会跳到由参数处理程序指定的函数,如果参数处理程序是不是一个函数指针,它必须是下列两个常数:
sig_ign忽略参数的正负号规定的信号。
sig_dfl设置参数的正负号规定为核心的信号处理方式,预置信号。
有关信号的编号和说明,请参阅附录D。
返回值返回先前的信号处理函数的指针,返回sig_err(1)如果有错误。
附加指令,在信号跳转到自行确定的处理程序处理函数之后,系统自动将处理功能返回到原始系统的预处理模式。如果你想改变此操作,请使用sigaction()。
例子涉及警报()()或增加()。
sigpending(查询信号被搁置)
相关功能的信号,sigaction,sigprocmask,sigsuspend
#包含头文件
定义函数int sigpending(sigset_t *集);
功能说明sigpending()将返回被搁置的参数集的指针信号集。
返回值执行返回0,如果出现错误返回1。
错误代码-EFAULT参数设定指针地址无法访问
eintr电话中断。
Sigprocmask(查询或设置信号掩码)
相关功能的信号,sigaction,sigpending,sigsuspend
#包含头文件
定义函数(int const int sigprocmask如何sigset_t *集,sigset_t * oldset);
功能说明sigprocmask()可以用来改变电流信号掩码,以及它的运行是由参数如何确定
sig_block新信号掩码是联系在一起的电流信号和面具的参数指定的信号掩码设置
sig_unblock移除当前信号屏蔽删除参数指定的信号掩码设置
sig_setmask设置电流信号掩码信号掩码参数指定的设置。
如果参数oldset不是一个空指针,电流信号掩码将指针返回。
返回值执行返回0,如果出现错误返回1。
错误代码-EFAULT参数集的oldset指针地址无法访问。
eintr电话中断
睡眠(让过程暂停一段时间)
相关函数信号报警
#包含头文件
定义函数无符号int睡眠(无符号int秒);
函数表示睡眠()将暂停当前进程,直到由参数秒指定的时间或由信号中断。
如果进程被暂停到参数秒指定的时间,返回值返回0,如果信号被中断,返回的剩余秒数返回。