搜索
查看: 2492|回复: 6

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

[复制链接]
发表于 2023-7-28 15:07:14 | 显示全部楼层 |阅读模式
看到原创小软件板块里几乎都是 Windows 程序,于是我突发灵感,写了一个用 Ctrl + C 关不掉的 Linux 程序
原理也很简单,Ctrl + C 结束进程是通过发送 SIGINT 信号实现的,kill 和 killall 结束进程默认通过发送 SIGTERM 信号实现,因此把 SIGINT 和 SIGTERM 信号捕获即可。
源码如下:
  1. #include <signal.h>
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <unistd.h>

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

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

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

  19.   while (1)
  20.     sleep(1);

  21.   return 0;
  22. }
复制代码

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

执行
  1. killall -SIGKILL test
复制代码


  1. killall -s SIGKILL test
复制代码




test

15.21 KB, 下载次数: 267

test.c

496 Bytes, 下载次数: 264

回复

使用道具 举报

发表于 2023-9-29 22:54:27 | 显示全部楼层
是我玩不明白的C++
回复

使用道具 举报

发表于 2023-9-30 12:19:21 | 显示全部楼层
不错不错,谢谢楼主分享!
加油!!
回复

使用道具 举报

 楼主| 发表于 2023-10-5 00:14:33 | 显示全部楼层
commandf 发表于 2023-9-29 22:54
是我玩不明白的C++

这是 C,不是 C++
回复

使用道具 举报

发表于 2023-10-22 16:48:26 | 显示全部楼层
本帖最后由 komeijikokoro 于 2023-10-22 17:04 编辑

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

使用道具 举报

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

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

使用道具 举报

发表于 2023-10-25 16:36:58 | 显示全部楼层
好久没看C了,都不太记得了,不过我个人习惯把#include <stdio.h>放第一行
回复

使用道具 举报

联系我们(Contact)|手机版|萝卜头IT论坛 ( 苏ICP备15050961号-1 )

GMT+8, 2024-11-21 18:20 , Processed in 0.086159 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表