在网上大家会看到可重入函数问题,由于工作中没有好好去测试过使用signal函数注册的调回函数是否有可重入问题和他的执行机制。
前两天写驱动时由于怕回调函数中做过多的处理影响到驱动,做了个简单的测试,测试环境是在linux3.0版本做的测试。
我在是驱动中使用send_sig函数向一个进程发信号并在调用send_sig后调用printk("-------------------------------\n")函数,并在回调函数中的代码入下:
sleep(10);
printf("===================\n");
函数,而main()函数中写下:
while (1)
{
usleep(500 * 1000);
printf("+++++++++++++++++++\n");
}
当我插上网线的拔掉网上线时终端输出:(插上网线的拔掉网线是不同的信号)
#+++++++++++++++++++
#+++++++++++++++++++
....
#-------------------------------
#-------------------------------
等10秒后
#===================
#===================
#+++++++++++++++++++
#+++++++++++++++++++
由这个测试结果发现,这个回调其实是进程自己调用的,内核只是帮做了CPU状态的保存和切换,这就不多说了,想明白的可以看一下手动写操作系统。
没有测试kill这个函数,应该也是一样原理。