Я столкнулся с одной проблемой обработки сигналов в Linux, моя цель — позволить процессу игнорировать сигнал SIGTERM. Но иногда, процесс все еще завершается, вероятность этой проблемы будет 1/60.
Поддельный код моего приложения:
static int g_count_sig_old = 0;
static volatile int g_count_sig = 0;
void _signalhandler(){
g_count_sig ++;
printf(...); // Maybe not safe, just for debugging
myTrace(...); // Write log to file1 is not signal safe, but just for debugging.
}
main(){
sigaction(...) // Register signal handler for SIGTERM
while(1){
sleep(1000); // wait one second
myNewTrace(...); // Output value of g_count_sig to file2
if( g_count_sig != g_count_sig_old ) {
g_count_sig_old = g_count_sig;
printf(...); // output value of g_count_sig
myNewTrace(...); // Output value of g_count_sig to file2
}
}
}
Я полагаю, что это приложение не будет завершено при получении сигнала SIGTERM, но фактический результат тестирования не соответствовал моему проекту. Иногда процесс все еще завершается после получения сигнала SIGTERM. И я подтверждаю, что процесс получил сигнал SIGTERM при возникновении проблемы, я могу наблюдать за выводом консоли и файлом трассировки.
Поэтому я чувствую себя озадаченным, почему это приложение закрывается, даже если игнорируется SIGTERM? Я не уверен, как определить причину этой проблемы, или это разумный симптом в Linux.
Надеюсь получить вашу помощь. Спасибо!
Задача ещё не решена.
Других решений пока нет …