Какое событие генерируется в Node.js для приложения, завершившегося из-за завершения сеанса SSH?(Нужно очистить GPIO) - PullRequest
0 голосов
/ 29 сентября 2018

Я запускаю приложение Node.js, которое выполняет некоторые задачи GPIO.Если возникает какая-либо ошибка или пользователь закрывает приложение с CTRL + C, я сейчас его обрабатываю.Один сценарий, который я не могу уловить, - это когда я отключаю свой SSH-сеанс, закрывая свой SSH-клиент.

Закрытие моего SSH-клиента убивает приложение Node.js (что нормально), но существуют определенные методы очистки GPIOэто должно произойти до его закрытия.

Это события, которые я пробовал, и ни одно из них не перехватывается при закрытии SSH:

var cleanup = () => { /*cleanup code*/ };
var domain = require('domain').create();
domain.on('error', cleanup);
process.on('uncaughtException', cleanup);
process.on('SIGINT', cleanup);
process.on('SIGTERM', cleanup);
process.on('exit', cleanup);
process.on('unhandledRejection', cleanup);
process.on('disconnect', cleanup);
process.on('SIGUSR1', cleanup);
process.on('SIGUSR2', cleanup);
process.on('beforeExit', cleanup);

Какое событие генерируется при закрытии приложения из-засессия SSH прекращается?

1 Ответ

0 голосов
/ 29 сентября 2018

Извините за не очень хороший ответ, но я не уверен, какая из этих причин является причиной его работы (или если это комбинация многих из них, поскольку при закрытии сеанса SSH при запуске приложения срабатывает несколько сигналов) но последний список, на который я попал, был:

process.on('SIGINT', cleanup);
process.on('SIGHUP', cleanup);
process.on('SIGTERM', cleanup);
process.on('SIGCONT', cleanup);

Теперь, выход из сеанса SSH при запуске программы правильно запускает методы очистки.


Для всех, кому интересно, что всемой код обработки ошибок на самом деле выглядит так:

var domain = require('domain').create();
domain.on('error', cleanup);
process.on('unhandledRejection', cleanup);
process.on('uncaughtException', cleanup);
process.on('SIGINT', cleanup); // Handle CTRL + C, *nix only https://stackoverflow.com/a/20165643/231730
process.on('SIGHUP', cleanup); // SSH hangup (probably needed with SIGCONT)
process.on('SIGTERM', cleanup); // Handles `kill PID` command on linux
process.on('SIGCONT', cleanup); // Handle when SSH connection closes that was running the app
...