Попытка игнорировать SIGTERM не удалась в Linux, процесс все еще не завершен

Я столкнулся с одной проблемой обработки сигналов в 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.

Надеюсь получить вашу помощь. Спасибо!

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]