linux下信号学习(一)

当我们想使用内核提供的功能时,我们会调用系统调用,比如文件操作、目录操作等等。这种调用都是事先已经安排好先后顺序的了,比如先打开文件,再写入文件。可是,还有一些情况不是事先安排好的,比如用户按

[crtl+c]退出,太突然了,有时文件保存一半,就退出了。这一类的操作,叫做信号。信号的作用多了,只是Maxiee目前只理解了着一个……

1. 信号的定义
信号是内核与进程、进程与进程间通讯的方式。
2. 常用的3个信号
SIGINT: 中断信号(也就是按下[crtl+c]后,内核传送给进程的信号)

SIGQUIT:退出信号

SIGSEGV:非法存取信号
3. 进程对内核传来的信号的操作:
1. 接受默认处理

2. 忽略 signal(信号名,SIG_IGN);

3. 调用自己的函数来处理 signal(信号名,处理函数名);
4. 示例程序

<

pre>这是一个演示如何在进程中截取SIGINT信号,并且替换为自定义的操作的程序。(误!)注意,这个程序退出不了了。

[c]

#include

#include

main()

{

//声明信号处理函数

void f(int);

//SIGINT是中断信号

//当按下[Crtl]+[c]

//就传送这个这个信号,程序默认是退出的

//而我们不用默认操作,改用f函数来处理

signal(SIGINT,f);

while(1){

printf("hellon");

sleep(2);

}

}

void f(int signum)

{

printf("OUCH!n");

}

[/c]



  1. 你的笔记写的很详细,受教了。我现在也正自学这本书,看到兄台的日志,感到很欣喜。我水平很低,课后题目感觉很难回答出来。有空多多指教。

    顺便说一下,貌似你的这个程序还是可以退出的。没有屏蔽SIG_QUIT这个信号。

    • Drizt,很高兴认识你!你说的对,这个程序可以退出。感谢你的指正。
      我也是刚刚开始学习Linux编程,咱们以后多多交流,共同学习,共同进步!