【发布时间】:2021-12-01 04:55:34
【问题描述】:
我读到了:
进程不能忽略两个信号——SIGKILL = 终止接收进程 – SIGSTOP = 暂停接收 进程
有些人甚至声称我们无法为他们声明处理程序
但是在 C 中我可以写:
#include <signal.h>
#include <stdio.h>
void sigint_handler(int signum) {
printf("I'm ignoring you!\n");
}
int main() {
signal(SIGKILL,sigint_handler);
for(;;) { /*endless loop*/ } return 0;
}
这不是矛盾吗?
附带问题,当我在终端中写kill 123 时,将发送什么信号,我在互联网上的任何地方都找不到此信息?
【问题讨论】:
-
“当我在终端中写入 kill 123 时,将发送什么信号,我在互联网上的任何地方都找不到此信息?” - man 1 kill 表示 "如果没有指定信号,则发送TERM信号"
-
signal(SIGKILL,sigint_handler);调用的返回值是多少?如果返回SIG_ERR,那么errno的值是多少? -
尝试
SIGKILL和SIGSTOP都失败了,你只是不检查返回值:onlinegdb.com/J9c-6_5LZ -
编写试图做非法事情的代码并不一定意味着无法编译代码——后果可能直到运行时才生效...
-
实际发送信号时会发生什么?它是否打印“我忽略了你!”?还是停止运行?
标签: c linux process signals handler