Linux系统编程之信号的概述和使用

1.概述:信号当一个进程在运行中,给这个进程一个指令能得到相应的操作这就是信号,比如当一个进程进入死循环时我可以用ctr+c让它结束。
信号都用相应的编号但是没有0
2.信号的处理(进程获得信号后的操作)
a.忽略 就是进进程可以不受信号的影响但是,有两种信号进程不能忽略SIGKILL和SIGSTOP这两种信号,这两种信号是超级用户,如果这两种信号被忽略一般来说就是病毒。
b.捕捉 就是自定义一个函数,当进程获得某个信号时来执行这个自定义函数。
c.默认 就是系统自己对这个信号的安排。
3.编程
捕捉的函数
入门
*发送信号:kill -9 进程pid
接受信号:typedef void (sighandler_t)(int)
sighandler_t signal(int signum,sighandler_t handler)
第一个参数是代表着信号这里要用信号的名字表示。
第二个参数是函数指针的意思且这个函数有一个int型的参数
代码解析:其中hanlder就是函数

在这里插入图片描述
高级
接受信号:
int sigaction(int signum,const struct sigation *act,struct sigaction *oldact)
signum:就是信号的原始名称。
act:是一个结构体
struct sigaction {
void (*sa_handler)(int);
void (*sa_sigaction)(int, siginfo_t *, void *);
sigset_t sa_mask;
int sa_flags;
void (sa_restorer)(void);
}
并且这是库里面的结构体直接定义设置即可,
其中结构体
第一个参数一调用其他参数均不能使用此时的sigaction就和入门的signal一样了。
第二个叁数有三个参数,1.就是信号的序号。2.是一个联合体其中pid_t 就是发送进程的pid号。3.是一个指针,空指针则代表无数据,非空则代表有数据。
第三个参数代表着可以阻塞。默认为阻塞。
第四个参数若有数据必须要设置成,SA_SIGINFO.
发信号:
int sigqueue(pid_t pid,int sig,const union sigval value)
pid:是那个发送给那个进程
sig:信号
value:一个联合体有一个int 和一个char
typedef union sigval {
int sival_int;
void *sival_ptr; }
这个联合体需要在代码中写到
代码示例
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值