信号处理程序中的非重入函数?

时间:2009-11-10 11:21:22

标签: handler signals

考虑一个调用exit()作为最后一条指令的信号处理程序: 可以安全地在该处理程序中调用非重入函数(例如free())吗?

恕我直言,由于处理程序不返回,这将是合法的 正常的执行顺序。

提前谢谢。

3 个答案:

答案 0 :(得分:6)

不,这是非法的,更多的是,很少有安全功能可以调用。

有一个要调用的安全功能列表,请参阅http://linux.die.net/man/2/signal注释部分。

答案 1 :(得分:1)

你必须区分两个信号:告诉守护进程“重新加载”的信号和终止守护进程的信号(“kill”)。在“杀”案中,你不需要任何东西。你的过程将会消亡,操作系统将清理你分配的任何东西。如果使用共享内存,则必须在重新启动时进行清理。不要在“kill”处理程序中做任何可能导致问题的事情。死了。

在重新加载的情况下,您可以调用任何您喜欢的功能,因为用户希望您“按顺序关闭”。在这种情况下,您再次获得相同信号的可能性很小(因此函数是否可重入并不重要)。

答案 2 :(得分:0)

重新入侵更多地与函数的“入口”有关,并且由所述函数维护的副作用和状态比退出...

您可能需要参考此man page