[英]Sending Signals in C?
我讀:
有兩個信號是進程不能忽略的——SIGKILL = 終止接收進程——SIGSTOP = 掛起接收進程
有些人甚至聲稱我們無法為他們聲明處理程序
但是在 CI 中可以寫:
#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
時會發送什么信號我在互聯網上的任何地方都找不到這些信息?
根據POSIX-1.2017 General Information §2.4.3 Signal Actions ,信號在傳遞到進程時可能具有三種不同的處置或“采取的行動”之一:
也就是說,POSIX 的同一部分還澄清了:
系統不允許將信號 SIGKILL 或 SIGSTOP 的動作設置為 SIG_IGN。
....
系統不允許進程捕捉信號 SIGKILL 和 SIGSTOP。
如果您檢查了signal()
調用的返回碼和errno ,您幾乎肯定會看到它因 EINVAL 而失敗。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.