UNIX系统中C语言信号处理全解析
1. 信号基础与背景处理
在UNIX系统里,标准命令解释器(如Bourne和C shell)在后台启动进程时,会忽略键盘产生的信号。这是因为键盘产生的信号通常会发送给从终端启动的所有进程,若不忽略,按下中断键会终止后台进程和目标进程。
2. 捕获信号
可以通过在 signal 调用中提供用户自定义处理程序的指针来捕获和处理信号。当信号首次被接收时,该处理程序会被调用,并传入一个整数参数,指示接收到的信号。这个整数可与 signal.h 中的常量进行比较,从而编写通用的信号处理程序。
以下是一个捕获中断信号并打印“OUCH”的示例程序:
#include <signal.h>
main()
{
extern int handler();
signal(SIGINT, handler);
for (;;)
pause();
}
handler()
{
printf("OUCH\n");
}
在非Berkeley系统中,第二次按下中断键会退出程序,因为信号未被重置。若要每次按下中断键都打印“OUCH”,可添加重置信号的代码:
#include <signal.h>
main()
{
extern int handler();
signal(SIGINT, handler);
for (;;
超级会员免费看
订阅专栏 解锁全文
1347

被折叠的 条评论
为什么被折叠?



