我有在XCode 6中構建的控制檯C++應用程序,並且想要爲其添加SIGTERM處理程序。有很多例子,但我無法讓他們工作。在OSx中處理sigterm
#include <csignal>
namespace
{
volatile std::sig_atomic_t gDone = 0;
}
static void term_handler(int i)
{
gDone = 1;
}
int main(int argc, const char * argv[])
{
std::signal(SIGTERM, term_handler);
while (!gDone);
return 0;
}
調試器停在while
聲明,但處理不叫。與此代碼相同的問題
#include <signal.h>
volatile sig_atomic_t gDone = 0;
void term_handler(int i)
{
gDone = 1;
}
int main(int argc, char* argv[])
{
struct sigaction sa;
sigset_t newset;
sigemptyset(&newset);
sigaddset(&newset, SIGHUP);
sigprocmask(SIG_BLOCK, &newset, 0);
sa.sa_handler = term_handler;
sigaction(SIGTERM, &sa, 0);
while(!gDone);
return 0;
}
是否存在代碼問題?在OSX中處理信號的正確方法是什麼?
你是如何傳遞信號的? – jxh
@jxh使用「kill」。問題在於XCode中斷了週期的執行,實際上顯示了執行被SIGTERM中斷的消息。但處理程序不會被調用。 – Sergi0
你可以把斷點放在'return'而不是'while'嗎?我不確定什麼打破'while'購買你。 – jxh