получение SIGTERM

#c #unix #signals #sigterm

#c #unix #сигналы #sigterm

Вопрос:

Я разработал интерфейс передачи сообщений на c, который используется для обеспечения связи между различными процессами, запущенными в моей системе. Этот интерфейс создает 10-12 потоков для своей цели и использует сокеты TCP для обеспечения связи.

Он работает нормально, но иногда он получает сигнал SIGTERM. Кто-нибудь, пожалуйста, может сказать мне, почему он получает этот сигнал.

Комментарии:

1. Что-то направляет kill на ваш процесс? SIGTERM является сигналом по умолчанию.

2. Возможно, вы могли бы в своем интерфейсе зарегистрировать обработчик для сигнала и напечатать значение pid процесса, который отправил SIGTERM (struct siginfo_t.si_pid) внутри обработчика.

3. никто не направляет kill на мой процесс, он внезапно получает SIGTERM сам по себе

4. у меня есть обработчик для SIGTERM, но он выводит только сигнал no. я получил, и это 15.

5. ну а вместо этого выведите pid. Используйте sigaction() вместо signal() для регистрации обработчика.

Ответ №1:

Если человек не убивает ваш процесс, то это делает ядро.

Это может произойти, когда машина пытается спасти себя от утопления (вы израсходовали всю память / подкачку / ресурсы). Возможно, вы захотите посмотреть, что происходит в этой системе, когда ваш процесс запущен.