簡體   English   中英

在 C 中發送信號?

[英]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 ,信號在傳遞到進程時可能具有三種不同的處置或“采取的行動”之一:

  • SIG_DFL:采取默認或“正常”行動。
  • SIG_IGN:忽略信號(不采取任何行動)。
  • 用戶定義:信號由用戶定義的信號處理程序“捕獲”。

也就是說,POSIX 的同一部分還澄清了:

系統不允許將信號 SIGKILL 或 SIGSTOP 的動作設置為 SIG_IGN。
....
系統不允許進程捕捉信號 SIGKILL 和 SIGSTOP。

如果您檢查了signal()調用的返回碼和errno ,您幾乎肯定會看到它因 EINVAL 而失敗

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM