信号-库函数signal和CTRL-C

库函数signal和CTRL-C

进程接受和发出的信号(signal)相关的设置函数signal,和ctrl-c的处理原理

ctrl-c是通过中断信号切断当前程序运行的。

中断是信号的一种,信号有用户、内核、进程三个来源。
用户的一些特定操作可以被设置为信号;
而内核通过信号接受程序报错或利用信号通知进程特定事件的发生(利用信号实现内核和进程通信);
进程操作产生的信号被称为同步信号,用户操作产生的信号称为异步信号。

和信号相关的一个重要函数是(csignal)中的signal():
在这里插入图片描述
一般用法是

signal(信号名,处理方式);

较常用信号名的是SIGINT(中断)和SIGQUIT(退出)
处理方式有三种:

  • SIG_IGN:忽略信号,有无这个信号都不做响应。如果在某个进程(程序)中对信号SIGINT(中断)设置了处理方式SIG_IGN(忽略),那么ctrl-c就不再能如常退出这个进程(程序)了。
    (tips:还可通过CTRL-\发出SIGQUIT信号退出)
  • SIG_DEF:根据头文件中的默认设置对信号作出反应。
  • 函数指针:( 返回值类型为void、有一个int类型参数的函数指针).函数指针指向自定义的函数,也就是说通过这个设置能够对一些信号进行自定义的处理。

信号名是头文件中定义的宏,具体可通过man 7 signal 获知:
信号-库函数signal和CTRL-C_第1张图片

注意:为了避免因为错误的设置无法退出某些进程,有两个信号不能被忽略、挂起、阻塞,它们分别是SIGKILL和SIGSTOP.

你可能感兴趣的:(杂记,从物理定律到编程语言)