Linux——信号

1.信号入门知识

1.1信号基本概念

信号是进程之间异步通知的一种方式。

1.2查看信号列表

1.3信号三种处理方式

正常处理

忽略

自定义

2.信号如何产生

信号产生通常有五种方式:

2.1终端键盘产生信号

典型信号:SIGINT(Ctrl+C)、SIGQUIT(Ctrl+)、SIGTSTP(Ctrl+Z)

2.2系统调用发出

函数:kill()(向指定进程发送信号)、raise(向当前进程发送信号)、tgkill()

2.3硬件异常触发

常见信号:

SIGSEGV:有段错误引起(非法访问内存)

SIGFPE:浮点异常(如除0错误)

SIGILL:非法指令(CPU无法执行)

2.4软件条件引起

定时器到期:alarm()触发SIGALRM

子进程状态变化:

        子进程终止--->SIGCHLD

        子进程被暂停/恢复--->SIGCONT/SIGSTOP

管道断裂:向无读端写数据--->SIGPIPE

3.信号捕捉

3.1关键API

3.1.1传统方式:SIGNAL()(简单但不可靠)

#include <signal.h>
void (*signal(int sig,void (*headler)(int)))(int);

void headler(int sig)
{
    write(1,"Got SIGNAL\n",12);
}
int main()
{
    signal(SIGINT,headler);//标记2号信号处理方式为headler
    while(1);//持续运行
}

3.1.2现代方式:SIGACTION()(推荐)

struct sigaction
{
    void     (*sa_handler)(int);//简单处理函数
    void     (*sa_sigaction)(int,siginfo_t *,void *);//高级处理
    sigset_t sa_mask;//屏蔽的信号
    int      sa_flags;//状态位
}
//安全捕获SIGSEGV
void segv_handler(int sig,siginfo_t *info,void *ucontext)
{
    printf("Segfault at address %p\n",info->si_addr);
    _exit(1);
}
int main()
{
    struct sigaction act;
    act.sa_sigaction = segv_handler;
    sigemptyset(&act.sa_mask);
    act.sa_falgs=SA_SIGINFO;
    sigaction(SIGSEGV,&act,NULL);
    
    int *ptr=NULL;
    *ptr=42;//触发段错误
}

4.信号阻塞

4.1信号阻塞概念

信号阻塞是Linux系统中控制信号递送的关键机制,它允许进程屏蔽特定的信号,确保关键代码不被打断。

4.2阻塞的三种状态

                 --->Generated:信号产生

Generated--->Pending:    被阻塞

Pending    --->Delivered:  解除阻塞

Delivered  --->Handled:    执行处理

4.3关键系统调用

4.3.1SIGPROCMASK()——设置进程级阻塞掩码

#include <signal.h>
int sigprocmask(int how,const sigset_t *set,sigset_t *oldset);

参数说明:

        how:操作类型(SIGBLOCK(添加阻塞)|SIG_UBLOCK(解除阻塞)|SIG_SETMASK(直接替换))

        set:要操作的信号集

        odlset:返回旧的信号集(可为NULL)

4.3.2pthread_sigmask()——线程级阻塞

int pthread_sigmask(int how,const sigset_t *set,sigset_t *odlset);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值