Что произойдет, если я наберу ctrl - c на терминале [закрыто]

Эту программу мне прислала моя подруга. Мы оба были новичками в ubuntu, и она спросила меня, что произойдет, если мы введем ctrl-c на терминале

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

void catch(int signo) {
    printf("Signal %d caught\n", signo);
    sleep(2);
}

int main() {
    int i;
    struct sigaction act;
    act.sa_flags = 0;
    act.sa_handler = catch;
    sigfillset(&(act.sa_mask));
    if (sigaction(SIGINT, &act, NULL) != 0) {
        perror("sigaction");
        exit(1);
    }
    for (i = 0; i < 100; ++i) {
        printf("sleep %d ....\n", i);
        sleep(1);
    }
    exit(0);
}
1
задан 8 October 2017 в 19:58

2 ответа

То, что произойдет:

  • Ваш терминал отправит SIGINT (прерывание) сигнал
  • , Ваш процесс прервет сигнал и передаст его числовое значение 2 Вашему catch функция, которая распечатает Signal 2 caught
  • прерывавший и обработала сигнал, программа продолжит основной цикл печати/сна

, Например

sleep 0 ....
sleep 1 ....
sleep 2 ....
sleep 3 ....
sleep 4 ....
^CSignal 2 caught
sleep 5 ....
sleep 6 ....
sleep 7 ....

, Вы сможете закрыть программу путем отправки SIGKILL сигнал, например, путем приостановки процесса с помощью Ctrl Z и затем вводя pkill myprog (где myprog название скомпилированной выполняемой версии кода).

The signals SIGKILL and SIGSTOP cannot be caught, blocked, or ignored.

См. man 7 signal для получения дополнительной информации об обработке сигнала и сигналах.

6
ответ дан 3 December 2019 в 06:30

Control+C (управляющий символ предают земле) отправляет SIGINT, который прервет приложение. Обычно заставляя это прерваться, но это до приложения для решения.

0
ответ дан 3 December 2019 в 06:30

Другие вопросы по тегам:

Похожие вопросы: