如果我在终端上输入 ctrl - c 会发生什么情况

如果我在终端上输入 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

接下来会发生什么:

  • 你的终端将发送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有关信号和信号处理的更多信息,请参阅。

答案2

Control+C(控制字符 intr)发送 SIGINT,这将中断应用程序。通常会导致其中止,但这取决于应用程序的决定。

相关内容