2016-12-20 2 views
1

Мне была дана программа ниже на экзамене, и вопрос состоял в том, сколько сигналов kill должно быть отправлено процессу для его прекращения. Мой ответ был 3 сигнала, но профессор настаивал только на 2 сигналах, необходимых для прекращения процесса? Как это так?Сколько сигналов смерти необходимо выполнить этой программе

static void action(int sig) 
{ 
    signal(SIGINT,SIG_DFL); 
} 
int main() 
{ 
    signal(SIGINT,SIG_IGN); 
    signal(SIGUSR1,action); 
    while(1) 
     pause(); 
} 
+7

Вам (должно) понадобится только один 'kill -9' ... (несмотря на зомби-инфекцию) – Kninnug

+0

Мы здесь вообще не говорим, мы говорим о том, сколько убийств должно быть отправлено этой программе в качестве он хочет. – Amine

+0

Да, забыл упомянуть, что единственными сигналами, которые будут использоваться, являются SIGUSR1 и SIGINT – Amine

ответ

3

Вам необходимо отправить SIGUSR1 для вызова action. И все action делает SIGINT своим обработчиком сигнала по умолчанию (SIG_DFL). Затем вы отправляете SIGINT, который затем запускает обработчик по умолчанию, который завершает процесс.

ПРИМЕЧАНИЕ: Это должно быть сделано в этом порядке, любая попытка отправить SIGINT до того, как SIGUSR1 будет проигнорирована из-за привязки к SIG_IGN.

+0

Благодарим вас за ответ. – Amine

Смежные вопросы