У меня есть консольное приложение C++, встроенное в XCode 6, и вы хотите добавить к нему обработчик SIGTERM. Есть много примеров, но я не могу заставить их работать.манипулятор sigterm в OSx
#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'? Я не уверен, что ломается «время». – jxh