Integral 发表于 2023-7-28 15:07:14

「整人程序」用 Ctrl + C 关不掉的 Linux 程序

看到原创小软件板块里几乎都是 Windows 程序,于是我突发灵感,写了一个用 Ctrl + C 关不掉的 Linux 程序{:23:}
原理也很简单,Ctrl + C 结束进程是通过发送 SIGINT 信号实现的,kill 和 killall 结束进程默认通过发送 SIGTERM 信号实现,因此把 SIGINT 和 SIGTERM 信号捕获即可。
源码如下:
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

void sig_handler(int signo) {
switch (signo) {
case SIGINT:
    puts("You pressed Ctrl + C, but it won't exit!");
    break;

case SIGTERM:
    puts("You want to terminate the program, but it won't exit!");
    break;
}
}

int main() {
struct sigaction action = {.sa_handler = sig_handler};
sigaction(SIGINT, &action, NULL);
sigaction(SIGTERM, &action, NULL);

while (1)
    sleep(1);

return 0;
}
------
正确解法:发送 SIGKILL 信号强制结束程序

执行
killall -SIGKILL test

killall -s SIGKILL test



commandf 发表于 2023-9-29 22:54:27

是我玩不明白的C++

jyssysz 发表于 2023-9-30 12:19:21

不错不错,谢谢楼主分享!
加油!!

Integral 发表于 2023-10-5 00:14:33

commandf 发表于 2023-9-29 22:54
是我玩不明白的C++

这是 C,不是 C++{:07:}

komeijikokoro 发表于 2023-10-22 16:48:26

本帖最后由 komeijikokoro 于 2023-10-22 17:04 编辑

在学C,也在用linux,直接下载的二进制文件没法在终端运行。
自己复制代码到VScode里编译出来的二进制文件可以运行的。
^CYou pressed Ctrl + C, but it won't exit!

Integral 发表于 2023-10-23 00:45:26

komeijikokoro 发表于 2023-10-22 16:48
在学C,也在用linux,直接下载的二进制文件没法在终端运行。
自己复制代码到VScode里编译出来的二进制文件 ...

下载下来的二进制文件,默认应该是没有可执行权限的
需要先用chmod +x test赋予可执行权限,再用./test执行

ATP 发表于 2023-10-25 16:36:58

好久没看C了,都不太记得了,不过我个人习惯把#include <stdio.h>放第一行
页: [1]
查看完整版本: 「整人程序」用 Ctrl + C 关不掉的 Linux 程序