Linux 信号编程知识点小结

Linux 信号编程知识点总结

信号名称信号编号描述
SIGHUP1终端挂断或控制进程终止
SIGINT2中断进程(Ctrl+C)
SIGQUIT3退出进程并生成核心转储
SIGILL4非法指令
SIGTRAP5跟踪/断点陷阱
SIGABRT6由abort函数发出的中止信号
SIGBUS7总线错误
SIGFPE8浮点异常
SIGKILL9强制终止进程
SIGUSR110用户自定义信号1
SIGSEGV11段错误
SIGUSR212用户自定义信号2
SIGPIPE13管道破裂
SIGALRM14闹钟超时
SIGTERM15终止信号
SIGCHLD17子进程状态改变
SIGCONT18恢复停止的进程
SIGSTOP19停止进程
SIGTSTP20终端停止进程(Ctrl+Z)

信号处理

在C语言中,可以使用signal函数来注册信号处理程序:

#include <stdio.h>
#include <signal.h>      

void signal_handler(int signo) {
    printf("Received signal: %d\n", signo);
    // 处理信号的代码
}

int main() {
    // 注册信号处理程序
    signal(SIGINT, signal_handler);

    // 其他主程序逻辑
}

信号发送

使用kill命令或kill()函数可以向进程发送信号:

kill -SIGTERM <pid>

或者在C语言中:

#include <signal.h>

int main() {
    // 向进程发送终止信号
    kill(<pid>, SIGTERM);

    return 0;
}

信号阻塞与解除阻塞

使用sigprocmask函数来阻塞或解除阻塞信号:

#include <stdio.h>
#include <signal.h>

int main() {
    // 阻塞指定信号
    sigset_t mask;
    sigemptyset(&mask);
    sigaddset(&mask, SIGINT);
    sigprocmask(SIG_BLOCK, &mask, NULL);

    // 解除阻塞指定信号
    sigprocmask(SIG_UNBLOCK, &mask, NULL);

    return 0;
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值