linux-0.11调试教程,信号处理方式

信号处理方式根据sa_handle可以分为3中。

第一种:默认,如果是SIGCHLD则返回。如果不是则调用do_exit()函数结束进程。蓝色代码。

第二种:忽略,直接返回。红色代码。update对信号值SIGINT和SIGTERM的处理句柄为SIG_IGN(忽略)。

第三种:用户自定义,收到对应的信号后,则会运行用户的自定义程序

void do_signal(long signr,long eax, long ebx, long ecx, long edx,
    long fs, long es, long ds,
    long eip, long cs, long eflags,
    unsigned long * esp, long ss)
{
    unsigned long sa_handler;
    long old_eip=eip;
    struct sigaction * sa = current->sigaction + signr - 1;
    int longs;
    unsigned long * tmp_esp;

    sa_handler = (unsigned long) sa->sa_handler;
    if (sa_handler==1)
        return;

    if (!sa_handler) {
        if (signr==SIGCHLD)
            return;
        else
            do_exit(1<<(signr-1));
    }

    if (sa->sa_flags & SA_ONESHOT)
        sa->sa_handler = NULL;


1.9.5版中147页把SIGCHLD的含义弄错了

#define SIGCHLD        17

3.0版310页把SIGCHLD的值弄错了





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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值