Pracuję nad aplikacją ze składnicą danych REDIS. Aby zachować integralność danych, chciałbym wyczyścić sklep podczas zamykania procesu.Kiedy proces Node.js może wyjść() bezpośrednio, bez uruchamiania innych zdarzeń sygnału (uncaughtException, SIGINT, SIGTERM ...)
Utworzono funkcję obsługi i powiązałem ją (z process.on()), aby sygnalizować zdarzenia: uncaughtException, SIGINT, SIGTERM, SIGQUIT i działa dobrze (CTRL + C, procesowe zabijanie, wyjątek, ...).
Ale przeczytałem, że w pewnych warunkach proces może zakończyć się bezpośrednio bez wywoływania innych zdarzeń sygnału.
Problem w tym konkretnym przypadku polega na tym, że procedura process.on ('exit') może przetwarzać tylko zadania synchroniczne.
Zrobiłem inny test, aby spróbować zabić proces na różne sposoby. I (z wyjątkiem SIGTERM na Windows) nie udało mi się zidentyfikować przypadku, w którym process.on ("exit") jest uruchamiany bezpośrednio, bez włączania SIGINT, SIGTERM lub innego zdarzenia.
Moje pytanie brzmi (w systemie Linux), w jakich warunkach proces może zakończyć się bezpośrednio, bez wywoływania tego zdarzenia: http://nodejs.org/api/all.html#all_signal_events?
Dobre pierwsze pytanie, witamy w SO:), także, gdzie przeczytałeś o innych warunkach? To może być dobry punkt wyjścia do badań. – DrakaSAN
W sprawie tego komentarza przynajmniej autor mówi: https://github.com/Automattic/socket.io-redis/pull/15 _ "Nie udało mi się poprawnie wykonać czyszczenia wyjścia, ** więc po normalnym exit **, pokoje są nadal wypełnione tymi samymi (obecnie nieistniejącymi) identyfikatorami gniazd. Rezygnacja z Ctrl + C lub sygnał zabicia powinien działać zgodnie z oczekiwaniami. "_ Może więc mógłbym zapytać bezpośrednio, co to jest" normalne wyjście " znaczy. – damien
To byłby dobry pomysł, nie widzę, jak może "wyjść normalnie" bez kodu przechodzącego w jedno zdarzenie procesu ... – DrakaSAN