}
+static void SignalExit(int signal) {
+ ev_unloop(EV_DEFAULT_ EVUNLOOP_ALL);
+}
+
+
+static int RegisterSignalHandler(int signal, void (*handler)(int)) {
+ struct sigaction sa;
+
+ memset(&sa, 0, sizeof(sa));
+ sa.sa_handler = handler;
+ sigfillset(&sa.sa_mask);
+ return sigaction(signal, &sa, NULL);
+}
+
+
int Start(int argc, char *argv[]) {
// Hack aroung with the argv pointer. Used for process.title = "blah".
argv = node::OS::SetupArgs(argc, argv);
V8::SetFlagsFromCommandLine(&v8argc, v8argv, false);
// Ignore SIGPIPE
- struct sigaction sa;
- bzero(&sa, sizeof(sa));
- sa.sa_handler = SIG_IGN;
- sigaction(SIGPIPE, &sa, NULL);
+ RegisterSignalHandler(SIGPIPE, SIG_IGN);
+ RegisterSignalHandler(SIGINT, SignalExit);
+ RegisterSignalHandler(SIGTERM, SignalExit);
// Initialize the default ev loop.