handling sigterm in OSx

Ich habe eine in XCode 6 integrierte C ++ - Konsolenanwendung und möchte ihr den SIGTERM-Handler hinzufügen. Es gibt viele Beispiele, aber ich kann sie nicht zum Laufen bringen.

#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;
}

Der Debugger hat auf dem @ gestopwhile Anweisung, aber der Handler wurde nicht aufgerufen. Das gleiche Problem mit diesem Code

#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;
}

Gibt es ein Problem mit dem Code? Wie gehe ich mit Signalen in OSX richtig um?

Antworten auf die Frage(6)

Ihre Antwort auf die Frage