nodejs навсегда обнаруживает событие SIGKILL или SIGINT

#node.js #process #forever #sigint #sigkill

Вопрос:

Я запускаю программу nodejs на запущенном сервере Ubuntu 14.04.4 LTS (GNU/Linux 3.13.0-74-generic x86_64) , используя версию forever v0.15.2 .

В моей программе (IoT1.js), мне нужно определить, когда он будет убит (для другого запуска), чтобы я мог записать последние состояния подключенных клиентов. Упрощенная версия моей программы:

 const WebsocketServer = require("websocket").server
... // websocket listener

const jsonfile = require("jsonfile")
...

process.on('SIGINT', () => { // also tried SIGKILL, not working either
  console.log("KILL fired")
  jsonfile.writeFileSync("./someLastState.json", states)

  // process.exit(-1)
})
 

Затем из ssh терминала я попробовал эти комбинации:

 forever start -p ./ -l lIoT1.log -e eIoT1.log -c node IoT1.js
forever stop <pid>

forever start -p ./ -l lIoT1.log -e eIoT1.log -c node IoT1.js
forever stop <pid> --killSignal=SIGINT // or SIGKILL

forever start -p ./ -l lIoT1.log -e eIoT1.log -c node IoT1.js --killSignal=SIGINT
forever stop <pid>

forever start -p ./ -l lIoT1.log -e eIoT1.log -c node IoT1.js --killSignal=SIGINT
forever stop <pid> --killSignal=SIGINT
 

но ничего не работает! т. е. «KILL fired» не печатается (я tail -f lIoT1.log постоянно читал его вывод) и someLastStates.json не создается.

Что я должен сделать, чтобы поймать этот сигнал об УБИЙСТВЕ, чтобы у моего nodejs был последний шанс записать какой-то файл перед тем, как его действительно убьют?

С уважением