你的位置:首页 > 操作系统

[操作系统]Linux 信号(二)—— signal 函数


弗洛伊德认为:要解决这些苦恼,当事人就要通过回忆并理解自己早期的童年经历,来获得对潜意识冲突的顿悟。弗洛伊德的疗法被称为“精神分析” (psychoanalysis),在 20 世纪的很长一段时间被心理卫生从业者广为采用。 —— 《Change Your Thinking》

ilocker:关注 Android 安全(新入行,0基础) QQ: 2597294287

1 #include <signal.h>2 void (*signal(int signo, void (*func)(int)))(int);

为 signo 指定的信号设置信号处理程序。成功则返回指向之前信号处理程序的函数指针,出错则返回 SIG_ERR。

如果看不懂 signal 的函数声明,就要好好复习一下 c/c++ 的基础(函数指针)了。

将 signal 函数的声明简化一下:

1 typedef void SigFunc(int); //信号处理函数原型2 Sigfunc * signal(int signo, SigFunc * func);

简单示例:

 1 void sig_handler(int signo) { 2  if (SIGUSR1 == signo) 3   printf(“received SIGUSR1.”); 4  else 5   printf(“received signal %d.”, signo); 6 } 7  8 int main() { 9  if (SIG_ERR == signal(SIGUSR1, sig_handler))10   printf(“can’t catch SIGUSR1”);11 12  for ( ; ; )13   pause();14 }

还可将信号处理函数设置为 SIG_IGN (表示忽略此信号) 或 SIG_DFL (表示使用系统默认的信号处理程序)。

信号 SIGSTOP、SIGKILL 无法捕获或忽略。

记录以下两点,但没有验证,不确定是否表述正确:

  • 假设正在执行信号 A 的处理程序,此时来了另一个信号 B,则会转去执行 B 的信号处理程序,处理完毕之后,再接着执行 A 的信号处理程序。
  • 在进程中有一个软中断信号域,该域中每一位对应一个信号,当收到某一信号时,相应位会置位。所以,对于同一种信号,进程并不知道在处理之前已经收到过多少个。

除了 signal,还有 sigaction 函数可以设置信号处理函数,比 signal 要复杂些,后面接着再写笔记。

学习资料: 《unix 环境高级编程》




福建自驾游攻略福建旅游线路大全什么时候去福建旅游最好福建跟团旅游报价多少深圳去江西旅游报价2015清明节东莞哪里有樱花看?龙凤山庄清明节樱花还有吗? 探访武汉最奢侈的采摘基地 2015清明节东莞龙凤山庄有什么好玩活动?东莞龙凤山庄清明节门票多少钱? 2015清明节东莞有什么花开放?东莞清明节看花去哪好? 2015春节广东赏花好去处?广东春节有什么花看? 2015春节广东赏花时间地点一览表?广东春节看花有什么花开了? 2015华南植物园牡丹花开放了吗?广州华南植物园牡丹花盛花期? 2015春节广州赏花什么地方好?广州春节期间有什么花看? 浪漫秋日乐逍遥 重庆周边自驾旅游目的地推荐 万圣节惊魂夜 恶魔势力席卷名胜世界 徐州印象 两汉文化与淳朴民风 崂山门票是多少? 去澳门哪里买东西便宜?哪里能买到廉价的精品? 香港旅游行程如何安排好? 在香港旅游能遇到明星吗? 香港哪里有大排档?哪里的比较好吃? 08055U100JAT2A Datasheet 08055U100JAT2A Datasheet AQ12EA620FAJME Datasheet AQ12EA620FAJME Datasheet 08055U100JAT4A Datasheet 08055U100JAT4A Datasheet 大兴安岭参团去港澳旅游 大兴安岭参团去港澳旅游 大兴安岭参团去港澳旅游 齐齐哈尔跟团去香港 齐齐哈尔跟团去香港 齐齐哈尔跟团去香港 齐齐哈尔参团去港澳 齐齐哈尔参团去港澳 齐齐哈尔参团去港澳