Использование подписи (), c

Я немного читал оsigaction()(источники взяты из моих конспектов )и я не уверен, что понимаю этот текст:

The signal mask is calculated and installed only for the duration of the signal handler.

By default, the signal “sig” is also blocked when the signal occurs.

Once an action is installed for a specific signal using sigaction, it remains installed until another action is explicitly requested.

Означает ли это, что маска сигнала по умолчанию восстанавливается после возврата из обработчика сигнала? Кроме того, нужно ли повторно -устанавливать обработчик после его использования, как если бы я использовал signal()?

Кроме того, есть этот фрагмент кода:

#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

void termination_handler(int signum) {
    exit(7);
}

int main (void) {
  struct sigaction new_action,old_action;
  new_action.sa_handler = termination_handler;
  sigemptyset(&new_action.sa_mask);
  sigaddset(&new_action.sa_mask, SIGTERM);
  new_action.sa_flags = 0;
  sigaction(SIGINT, NULL, &old_action);
  if (old_action.sa_handler != SIG_IGN) {
         sigaction(SIGINT,&new_action,NULL);
  }
  sleep(10);
  return 0;
}

Итак, -, как именно будет обрабатываться SIGTERM? Я вижу, что установлен обработчик termination handler(), но затем SIGTERMбыл добавлен к маске сигнала без использования sigprocmask(). Что это значит? Спасибо!

P.S. последний вопрос :почему утверждение ifв main()?

6
задан Francesco Boi 7 December 2018 в 17:36
поделиться