信号是软件中断,它提供了一种处理异步事件的方法,每个信号有个以SIG打头的名字,讲signal函数之前我们先了解下当前系统所支持的信号名称,在linux中敲下kill -l就能查看。

[lingyun@localhost file]$ kill -l1) SIGHUP       2) SIGINT       3) SIGQUIT      4) SIGILL       5) SIGTRAP6) SIGABRT      7) SIGBUS       8) SIGFPE       9) SIGKILL     10) SIGUSR1
11) SIGSEGV     12) SIGUSR2     13) SIGPIPE     14) SIGALRM     15) SIGTERM
16) SIGSTKFLT   17) SIGCHLD     18) SIGCONT     19) SIGSTOP     20) SIGTSTP
21) SIGTTIN     22) SIGTTOU     23) SIGURG      24) SIGXCPU     25) SIGXFSZ
26) SIGVTALRM   27) SIGPROF     28) SIGWINCH    29) SIGIO       30) SIGPWR
31) SIGSYS      34) SIGRTMIN    35) SIGRTMIN+1  36) SIGRTMIN+2  37) SIGRTMIN+3
38) SIGRTMIN+4  39) SIGRTMIN+5  40) SIGRTMIN+6  41) SIGRTMIN+7  42) SIGRTMIN+8
43) SIGRTMIN+9  44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9  56) SIGRTMAX-8  57) SIGRTMAX-7
58) SIGRTMAX-6  59) SIGRTMAX-5  60) SIGRTMAX-4  61) SIGRTMAX-3  62) SIGRTMAX-2
63) SIGRTMAX-1  64) SIGRTMAX
kill默认发送SIGTERM的信号,若其被signal捕捉,那我们也不慌,记住一招,kill -9 加进程号或者是killall -9 加进程名发送SIGKILL的信号,任何程序都会被秒杀。
[lingyun@localhost file]$ ps aux | grep a.out
lingyun  11414  0.0  0.0  22596   412 ?        Ssl  Jan31   0:01 ./a.out
lingyun  12091  0.0  0.0  22596   412 ?        Ssl  00:19   0:00 ./a.out
lingyun  13364  0.0  0.0   6056   820 pts/1    S+   04:32   0:00 grep a.out
[lingyun@localhost file]$ kill -9 11414
[lingyun@localhost file]$ ps aux | grep a.out
lingyun  12091  0.0  0.0  22596   412 ?        Ssl  00:19   0:01 ./a.out
lingyun  13366  0.0  0.0   6056   796 pts/1    S+   04:33   0:00 grep a.out
[lingyun@localhost file]$ killall -9 a.out
[lingyun@localhost file]$ ps aux | grep a.out
lingyun  13369  0.0  0.0   6052   784 pts/1    S+   04:33   0:00 grep a.out

给大家看一个特别简单的signal函数的调用,在看程序之前,咱们先要知道键盘上的ctrl加c对操作系统发送的是SIGINT的信号,我们试图去 捕捉这个信号,然后再干其他的事情。

#include <stdlib.h>
#include <stdio.h>
#include <signal.h>
#include <unistd.h>
int     g_alarm = 0;
void sig_catch(int signum)
{  printf("Catch signal [%d]\n", signum);  //捕捉到SIGINT后打印这个return;
}
int main(int argc,char *argv[])
{printf("program %s start running\n",argv[0]);  //打印第一个参数signal(SIGINT, sig_catch);     //捕捉SIGINT的信号函数alarm(10);      //闹钟,十秒后程序自动退出while(1);{sleep(10);}
}

接着我们看执行结果,在执行的时候咱们试着多次按ctrl加c试图结束程序,可它就像个病毒一样,停不下来, 只有等待闹钟的 十秒钟结束,它才会静静自行安息。

[lingyun@localhost file]$ gcc signal.c
[lingyun@localhost file]$ ./a.out
program ./a.out start running
^CCatch signal [2]
^CCatch signal [2]
^CCatch signal [2]
^CCatch signal [2]
^CCatch signal [2]
^CCatch signal [2]
^CCatch signal [2]
^CCatch signal [2]
^CCatch signal [2]
^CCatch signal [2]
^CCatch signal [2]
^CCatch signal [2]
^CCatch signal [2]
^CCatch signal [2]
^CCatch signal [2]
^CCatch signal [2]
^CCatch signal [2]
闹钟

linux中signal函数的简单用法相关推荐

  1. linux中signal函数返回值,signal函数、sigaction函数及信号集操作函数

    信号是与一定的进程相联系的.也就是说一个进程可以决定在进程中对哪些信号进行什 么样的处理.例如一个进程可以忽略某些信号而只处理其他一些信号另外一个进程还可以选择如何处理信号.总之这些总与特定的进程相联 ...

  2. matlab中ode45函数的用法_带你理解Excel中COUNTIF函数的简单用法

    每天5分钟,每天学一点. COUNTIF函数是Excel中最常用的统计函数之一,它的作用主要是用于根据特定条件对数据进行统计.假如,你想统计一下本周总共做了几次健身/瑜伽,或者统计上了几次培训课,那么 ...

  3. signal函数的简单用法

    1.函数原型理解 void (*signal(int sig,void(*func)(int)))(int); 指定使用sig指定的信号编号处理信号的方法. signal函数的返回值是函数指针. 比如 ...

  4. Linux中signal函数

    signal函数介绍 #include <signal.h> signal(参数1,参数2): 参数1:我们要进行处理的信号.系统的信号我们可以再终端键入kill -l查看(共64个).其 ...

  5. Linux中signal的种类和用法

    目录 1.signal信号详解 1.1 信号列表 1.2 信号详解 2.信号的来源 2.1 信号来自内核, 生成信号的请求来自以下3个地方. 2.2 信号捕获处理 2.3 信号处理例子 3.sigac ...

  6. Oracle中sign函数的简单用法

    sign函数语法: sign(n) sign函数说明: 取数字n的符号,大于0返回1,小于0返回-1,等于0返回0 示例: select sign( 100 ),sign(- 100 ),sign( ...

  7. 每天学一点儿shell:linux中时间函数的date的用法

    文章目录 1.linux中date函数格式 2.date日期函数的具体用法 2.1.获取相应格式的日期 2.2.获取相隔时间段的日期 2.2.1.获取今天的日期 2.2.2.获取昨天的日期 2.2.3 ...

  8. python3的格式化用法_浅析python3字符串格式化format()函数的简单用法

    format()函数 """ 测试 format()函数 """ def testformat(): # format()函数中有几个元素, ...

  9. linux内核sock_sendmsg,为什么linux中sendto函数中的msg.msg_iovlen=1;

    为什么linux中sendto函数中的msg.msg_iovlen=1; | 内核中定义的sys_sendto的源码吗? 这个属于sendmsg中struct msghdr的用法问题, sys_sen ...

最新文章

  1. 微信小程序 实现复制到剪贴版功能
  2. 【elementUI】el-tree搜索时加载子节点对应父节点、父节点对应子节点树
  3. 自定义控件的getChildCount
  4. CSDN博客导出备份工具
  5. c语言怎样获得函数内参数的值_C语言可变参数函数的实现原理
  6. 2018.9.10.Matlab实验一:熟悉Matlab开发环境
  7. ZZULIOJ 1098: 复合函数求值(函数专题)
  8. 大数据_Hbase-数据存储介绍---Hbase工作笔记0002
  9. ati hd4570 linux amd 64 安装命令,ATI 显卡的驱动在Linux下的安装方法
  10. 使用JavaScript在页面打印系统当前时间
  11. Diffusion Models:生成扩散模型
  12. f分布表完整图a=0.01_桥梁横向分布系数计算方法及案例详解
  13. html中如何写平方根等,平方根一定是整数吗
  14. How Did Watson Answer? —— Typing Coerced Candidate Answer
  15. 仿淘宝,京东红包雨(基于Phaser框架)
  16. 大数据和人工智能概念全面解析
  17. 基于单片机的超市储物柜设计_基于单片机的超市储物柜控制系统设计.docx
  18. 点猫科技与Aqara绿米达成战略合作,助推校内人工智能教育普及
  19. 元宇宙虚拟人物风格形象应用场景制作
  20. 微信小程序动态生成二维码

热门文章

  1. 有情怀有实力:掌门1对1正成为推动教育均衡的中坚力量
  2. Python入门-类
  3. python出现traceback什么意思_Python Traceback详解
  4. macbook如何复制文件到U盘
  5. 【电子通识】查找硬件学习资料的方法
  6. ChatGPT 辅助软件编程
  7. LeetCode | 4. Median of Two Sorted Arrays(中位数)
  8. Web开发人员最易犯下的十种常见错误
  9. 我的新伙伴——荣耀锐龙笔记本MagicBook
  10. (重点)jQuery模板:jQuery Templates Proposal