1#ifndef _WIN32 2#include <node.h> 3#include <v8.h> 4#include <uv.h> 5#include <assert.h> 6#include <unistd.h> 7 8using v8::Boolean; 9using v8::FunctionCallbackInfo; 10using v8::Int32; 11using v8::Value; 12 13void Handler(int signo, siginfo_t* siginfo, void* ucontext) { 14 char signo_char = signo; 15 int written; 16 do { 17 written = write(1, &signo_char, 1); // write() is signal-safe. 18 } while (written == -1 && errno == EINTR); 19 assert(written == 1); 20} 21 22void RegisterSignalHandler(const FunctionCallbackInfo<Value>& args) { 23 assert(args[0]->IsInt32()); 24 assert(args[1]->IsBoolean()); 25 26 int32_t signo = args[0].As<Int32>()->Value(); 27 bool reset_handler = args[1].As<Boolean>()->Value(); 28 29 node::RegisterSignalHandler(signo, Handler, reset_handler); 30} 31 32NODE_MODULE_INIT() { 33 NODE_SET_METHOD(exports, "registerSignalHandler", RegisterSignalHandler); 34} 35 36#endif // _WIN32 37