/ / Kiedy programy są uruchamiane na błędach, jak pisać do logów i przesyłać logi do MYSQLa w funkcjach obsługi sygnałów? - c ++, obsługa sygnałów

Kiedy programy napotykają błędy, jak zapisywać do logów i przesyłać logi do MYSQL w funkcjach obsługi sygnałów? - c ++, obsługa sygnałów

Chciałbym napisać jedną obsługę sygnałufunkcja dla wielu programów działających na różnych serwerach, tak aby po ich uruchomieniu na przykład błąd segmentacji SIGSEGV lub SIGTERM itp., funkcja obsługi sygnałów może wygenerować dziennik i przesłać zawartość do centralnego serwera MYSQL. Ma to na celu poinformowanie administratora o identyfikacji serwera i usunięcie problemu. Z moich badań powinienem korzystać z obsługi sigaction lub exception.

P1: Dla mojego celu, który (obsługa sygnałów lub obsługa wyjątków) powinienem używać?

P2: Czytałem, że nie zaleca się wywoływania nierecentacyjnych funkcji w funkcjach obsługi sygnału, np. printf (). W takim przypadku jak mogę wygenerować plik dziennika? Czy mogę nawet połączyć się z MySQL, aby przesyłać logi w funkcjach obsługi sygnałów?

Pracuję z C ++ i Linux. Wielkie dzięki za przeczytanie.

Odpowiedzi:

0 dla odpowiedzi № 1

Masz rację, każdy program powinien implementować własne reakcje na sygnały!

Q1: Używaj sigaction (), jest on bardziej rozwinięty niż poprzedni sygnał ().

P2:

  • Obsługa sygnałów jest atomowa dla całego procesu. Możesz użyć printf (), jeśli masz pewność, że nie stworzysz drugiego SIGSEGV.
  • W przypadku sigaction rezerwujesz niewielką ilośćstos dla obsługi sygnału. Ten pozostały stos jest użyteczny, jeśli program przechodzi w przepełnienie stosu. Upewnij się, że działania programu obsługi sygnału pasują do tego pozostałego stosu. Zapisywanie pliku dziennika za pomocą printf jest OK, ale stos używany przez bibliotekę sieciową nie jest pod twoją kontrolą.