考虑一个调用exit()作为最后一条指令的信号处理程序: 可以安全地在该处理程序中调用非重入函数(例如free())吗?
恕我直言,由于处理程序不返回,这将是合法的 正常的执行顺序。
提前谢谢。
答案 0 :(得分:6)
不,这是非法的,更多的是,很少有安全功能可以调用。
有一个要调用的安全功能列表,请参阅http://linux.die.net/man/2/signal注释部分。
答案 1 :(得分:1)
你必须区分两个信号:告诉守护进程“重新加载”的信号和终止守护进程的信号(“kill”)。在“杀”案中,你不需要任何东西。你的过程将会消亡,操作系统将清理你分配的任何东西。如果使用共享内存,则必须在重新启动时进行清理。不要在“kill”处理程序中做任何可能导致问题的事情。死了。
在重新加载的情况下,您可以调用任何您喜欢的功能,因为用户希望您“按顺序关闭”。在这种情况下,您再次获得相同信号的可能性很小(因此函数是否可重入并不重要)。
答案 2 :(得分:0)
重新入侵更多地与函数的“入口”有关,并且由所述函数维护的副作用和状态比退出...
您可能需要参考此man page。