• 【Unix/Linux】信号-库函数signal和CTRL-C
  • 2025-09-11 02:51:54
  • 库函数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 获知:

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