#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:
Если человек не убивает ваш процесс, то это делает ядро.
Это может произойти, когда машина пытается спасти себя от утопления (вы израсходовали всю память / подкачку / ресурсы). Возможно, вы захотите посмотреть, что происходит в этой системе, когда ваш процесс запущен.