Что произойдет, если я нахожу 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

8 ответов

Что произойдет:

ваш терминал отправит сигнал 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, например приостановив процесс с помощью CtrlZ и затем набрав pkill myprog (где myprog - имя вашей скомпилированной исполняемой версии кода).

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

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

6
ответ дан 22 May 2018 в 23:48

Что произойдет:

ваш терминал отправит сигнал 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, например приостановив процесс с помощью CtrlZ и затем набрав pkill myprog (где myprog - имя вашей скомпилированной исполняемой версии кода).

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

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

6
ответ дан 18 July 2018 в 15:14

Что произойдет:

ваш терминал отправит сигнал 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, например приостановив процесс с помощью CtrlZ и затем набрав pkill myprog (где myprog - имя вашей скомпилированной исполняемой версии кода).

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

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

6
ответ дан 24 July 2018 в 20:35

Что произойдет:

ваш терминал отправит сигнал 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, например приостановив процесс с помощью CtrlZ и затем набрав pkill myprog (где myprog - имя вашей скомпилированной исполняемой версии кода).

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

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

6
ответ дан 31 July 2018 в 23:37

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

0
ответ дан 22 May 2018 в 23:48

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

0
ответ дан 18 July 2018 в 15:14

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

0
ответ дан 24 July 2018 в 20:35

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

0
ответ дан 31 July 2018 в 23:37

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

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