У меня есть случай с двумя сигналами SIG1 и SIG2 с handler1 и handler2 соответственно. handler1 отправляет SIG2 с «kill (getpid(), SIG2)», предполагая, что getpid возвращает pid процесса, в процесс.Может ли программа работать, пока есть два сигнала в ожидании
Возможно ли, что программа выполняется некоторое время до запуска handler2?
int counter;
void sigalrm_handler (int num) {
counter += 1;
}
int main (void) {
signal(SIGALRM, &sigalrm_handler);
counter = 2;
alarm(1);
sleep(1);
counter -= 3;
exit(counter);
return
}
Только до тех пор, пока прерывания отключены. Прерывания могут быть отключены во время (предположительно короткого) периода времени, в течение которого вы обрабатываете прерывание. Обычно это включает в себя выполнение относительно короткого фрагмента кода внутри IV (вектор прерывания) ** и ** выполнение соответствующего ISR (то, что вы называете «обработчиком»), вызывается в конце IV-кода. Если ISR занимает много времени, то сценарий, который вы описываете, может иметь место. –
@ barakmanos В случае, который я описываю, нет никаких прерываний, отключенных в любом месте, а по отключенному вы подразумеваете SIG_IGN (игнорирование сигнала) или маскирование сигнала (sigprocmask)? – CodeWithPride
Мой комментарий, вероятно, более подходит для системы с одним процессом (с несколькими ISR и, возможно, с несколькими потоками). –