O que acontecerá se eu digitar ctrl-c no terminal [closed]

1

Eu recebi este programa que meu amigo me enviou. E ambos eram novos no Ubuntu e ela me perguntou o que aconteceria se nós digitarmos ctrl-c no terminal

#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);
}
    
por wandamaximoff 10.04.2017 / 12:06

2 respostas

6

O que acontecerá é:

  • seu terminal enviará o sinal SIGINT (interrupção)
  • seu processo interceptará o sinal e transmitirá seu valor numérico 2 à sua função catch , que imprimirá Signal 2 caught
  • tendo interceptado e processado o sinal, o programa continuará com o loop principal de impressão / suspensão

Por exemplo

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

Você poderá matar o programa enviando um sinal SIGKILL , por exemplo, suspendendo o processo usando Ctrl Z e, em seguida, digitando pkill myprog (onde myprog é o nome da sua versão executável compilada do código).

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

Veja man 7 signal para mais informações sobre sinais e manuseio de sinais.

    
por steeldriver 10.04.2017 / 14:26
0

Control+C (intr de caractere de controle) envia SIGINT que interromperá a aplicação. Geralmente fazendo com que ele aborte, mas isso depende do aplicativo decidir.

    
por Sivanesh Fiz 10.04.2017 / 13:10