星空网 > 软件开发 > 操作系统

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 环境高级编程》




原标题:Linux 信号(二)—— signal 函数

关键词:linux

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

后疫情时代跨境电商如何突围?:https://www.kjdsnews.com/a/1303635.html
欧洲vat怎么注册-如何注册欧洲vat-德国vat可以自己注册吗:https://www.kjdsnews.com/a/1303636.html
国外vat number-vat number是什么意思-vat Number:https://www.kjdsnews.com/a/1303637.html
vat refund payment ie-vat refund for tourists-vat refunds:https://www.kjdsnews.com/a/1303638.html
vat服务-vat服务商-vat服务商有哪些:https://www.kjdsnews.com/a/1303639.html
澳洲大陆vat517的价格-澳洲大陆vat357-澳洲大陆vat758:https://www.kjdsnews.com/a/1303640.html
深圳西乡三月三北帝庙会的千岁盆菜多少钱:https://www.vstour.cn/a/365180.html
TikTok SEO:TikTok会取代谷歌吗?:https://www.kjdsnews.com/a/1836538.html
相关文章
我的浏览记录
最新相关资讯
海外公司注册 | 跨境电商服务平台 | 深圳旅行社 | 东南亚物流