2014-01-31 79 views
0

我有一个用于SIGABRT的信号处理程序,当收到信号时,我需要更多时间让其他线程正常退出。然后,我会在信号处理程序中执行_exit()以退出整个过程。如何在SIGABRT信号处理程序内部等待

但我不知道如何在信号处理程序中等待。我认为在信号处理程序中使用睡眠有一些限制。我不想用忙等待。

有人提出任何想法吗?

回答

0

在信号处理程序中可以执行哪种代码没有限制。你只需要记住,在执行你的信号处理程序时可能会出现另一个信号,让你处于半成品功能,锁定互斥锁或其他应该更好保持不间断的事情中。

通常情况下,您应该让信号处理程序设置一个标志,向所有线程发出信号以良好退出,从信号处理程序返回,然后让您的代码正常退出。

+0

SIGABRT内部的usleep()使它永久挂起! –

+0

与usleep()内的信号处理程序,哪个线程会睡觉?或者信号处理程序会睡觉? –

+0

@LunarMushrooms执行信号处理程序的线程将休眠。它可能永久睡眠的原因是因为其他信号可能同时到达,从而中断了睡眠并使线程执行其他操作。这完全取决于线程处理信号的操作系统的实现,通常它是随机的。 –