首页 > 系统相关 >linux:信号

linux:信号

时间:2024-07-14 16:52:49浏览次数:8  
标签:printf signal linux break 信号 signum include

信号的简介

信号(signal):在 Linux 系统中,信号是一种进程间通信(IPC)的机制,主要用于通知进程发生了某些异常或特殊情况。信号可以由硬件异常(如除零错误)、软件异常(如非法内存访问)或来自其他进程的通知(如终止请求)触发。Linux 支持多种信号,每种信号都有其特定的用途和默认行为。

  • 信号的类型

linux中有哪些信号,可以通过kill命令查询:

信号名称可以用数字表示,例如图中数字就一一对应了信号名称。在linux中,当程序接受到信号后,可以对信号进行捕捉,不同的信号有对应处理逻辑。

仅仅列举了常用信号,其他信号暂不做说明。

名称 编号 备注
SIGINT 2 程序终止(interrupt)信号, 通常是Ctrl+C时发出
SIGKILL 9 用来立即结束程序的运行. 本信号不能被阻塞、被处理、被忽略
SIGUSR1 10 留给用户使用
SIGUSR2 12 留给用户使用
SIGTERM 15 程序结束(terminate)信号, 与SIGKILL不同的是该信号可以被阻塞和处理. 通常用来要求程序自己正常退出. shell命令kill缺省产生这个信号.
SIGSTOP 19 停止(stopped)进程的执行;本信号不能被阻塞、被处理、被忽略
  • 信号的产生

程序在terminal执行中,常常通过ctrl+c来强制结束程序;如果程序在后台执行,常常通过kill命令杀死制定程序的pid。这就是信号产生的两种方式(硬件中断和软件中断)

验证各种信号

timer.c

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>
#include <unistd.h>
#include <signal.h>

static void signal_handler(int signum)
{
    switch (signum)
    {
    case SIGINT:
        printf("SIGINT: %d\n", signum);
        break;
    case SIGUSR1:
        printf("SIGUER1: %d\n", signum);
        break;
    case SIGUSR2:
        printf("SIGUER2: %d\n", signum);
        break;
    case SIGTERM:
        printf("SIGTERM: %d\n", signum);
        break;
    default:
        break;
    }
}

int main(int argc, char *argv[])
{
    signal(SIGINT, signal_handler);
    signal(SIGUSR1, signal_handler);
    signal(SIGUSR2, signal_handler);
    signal(SIGTERM, signal_handler);

    while (g_main_run)
    {
        sleep(1);
    }
    printf("exit...\n");

    return 0;
}

结果:

第一个终端:

第二个终端:

标签:printf,signal,linux,break,信号,signum,include
From: https://www.cnblogs.com/caojun97/p/18301598

相关文章

  • Linux 下 C 语言编程概述
    来自......
  • Linux系统编程-线程同步详解
    线程同步是指多个线程协调工作,以便在共享资源的访问和操作过程中保持数据一致性和正确性。在多线程环境中,线程是并发执行的,因此如果多个线程同时访问和修改共享资源,可能会导致数据不一致、竞态条件(racecondition)等问题。线程同步通过协调线程的执行顺序和共享资源的访问来避免......
  • Linux可执行程序启动流程
    进程是如何启动的?进程启动过程示例代码#include<stdio.h>intmain(){printf("hello,world\r\n");return0;}启动两个终端,使用strace命令跟踪进程启动过程strace-f-s655000-i-T-ooutput.txt-p19510各个选项参考strace的man手册-f跟......
  • Linux Vim最全面的教程
    前言Vim是一款强大的文本编辑器,广泛用于Linux系统中。其强大的功能和灵活的配置使得它成为许多开发者和系统管理员的首选工具。本文旨在提供一份最全面的Vim教程,帮助你从基础到高级,全面掌握这款编辑器。目录Vim简介Vim的安装基本操作常用命令高级功能配置Vim插件管理实用......
  • SpinalHDL之模拟信号和输入输出
    本文作为SpinalHDL学习笔记第十五篇,记录使用SpinalHDL模拟信号相关API。SpinalHDL学习笔记总纲链接如下:SpinalHDL学习笔记_spinalhdlblackbox-CSDN博客可以使用Analog/inout功能定义三态信号。添加这些功能的原因有:•能够将三态信号添加到顶层(它避免了必须用一些手......
  • Linux常用选项和指令
    目录Linux指令使用注意用户创建与删除ls指令ls指令介绍ls常见选项ls选项组合使用pwd指令Linux文件系统结构多叉树结构文件系统介绍多叉树结构文件系统的特点cd指令绝对路径相对路径cd指令介绍家户目录最近访问的目录touch指令​编辑mkdir指令mkdir指令介绍......
  • linux系统查看父子进程
    ①查找特定进程的父进程ps-opid,ppid,cmd-p1234查找进程PID为1234的父进程②显示所有进程的树状结构pstree③显示特定进程及其父进程的树状结构pstree-s1234④启动top后,按下c键可以查看完整命令,按下f键进入字段管理界面,然后选择PPID字段。⑤启......
  • linux配置用户多次登录终端失败被锁定机制
    用户登录Linux系统终端,若多次输入密码错误失败将会被锁定,被锁定期间将不能再登录系统。该机制是由于系统应用了Linux-PAM(PluggableAuthenticationModulesforLinux)可插拔认证模,是一套适用于Linux的身份验证共享库系统。设置修改/关闭锁定机制步骤:1、在终端界面输入命......
  • linux-卸载phpstudy
    需要sudo-i再用root角色去/usr/bin/phpstudy-uninstall再删掉rm-rf/usr/local/phpstudy`运行状态===========webpanelstopphpstudyrunning=安装完成==请用浏览器访问面板:外网:http://119.139.137.25:9080/9B7E96内网:http://192.168.137.128:9080/9B7E96系统初......
  • Nexpose v6.6.260 for Linux & Windows - 漏洞扫描
    Nexposev6.6.260forLinux&Windows-漏洞扫描Rapid7VulnerabilityManagement,releaseJul10,2024请访问原文链接:https://sysin.org/blog/nexpose-6/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.org您的本地漏洞扫描程序搜集通过实时覆盖整个网络,随......