SIGNAL相關知識

在Linux定義的信號中,不能被忽略和捕獲的信號是哪兩個?這樣設計的目的是什麼?

SIGKILL和SIGSTOP不能被忽略

原因:因爲它們向超級用戶提供了一種進程終止的可靠方法。

信號的產生的條件信號的產生的條件有哪些?

1.當用戶按某些終端鍵時,將產生信號。

  • ctrl+c組合鍵:產生中斷信號 SIGINT

  • ctrl+\組合鍵:產生中斷信號 SIGQUIT

  • ctrl+z組合鍵:產生中斷信號SIGSTOP

2.硬件異常將產生信號。除數爲0,無效的內存訪問等。這些凊況通常由硬件檢測到,並通知內核,然後內核產生適當的信號發送給相應的進程.

3.軟件異常將產生信號。當檢測到某種軟件條件已發生,並將其通知有關進程時,產生信號。
4.調用kill函數將發送信號。注意:接收信號進程和發送信號進程的所有者必須相同,或發送信號進程的所有者必須是超級用戶。
5.運行kill命令將發送信號。此程序實際上是使用kill函數來發送信號。也常用此命令終止一個失控的後臺進程。

信號的處理方式有哪些?

忽略此信號:

  • 大多數信號都可以使用這種方式處理,但 SIGKILL和 SIGSTOP決不能被忽略,原因是它們向超級用戶提供種使進程終止的可靠方法。

執行系統默認動作

  • 對大多數信號來說,系統默認動作是用來終止該進程。

自定義信號處理函數

  • 用用戶定義的信號處理函數處理該信號。

編寫程序,程序運行時每隔一秒打印一個點號(.),當收到SIGINT信號時,打印"hello world"

#include<stdio.h>
#include<signal.h>
#include<unistd.h>

void fun(){
    printf("hello world\n");
}

int main(){
    signal(SIGINT, fun);

    while(1){
        printf(".\n");
        sleep(1);
    }
    return 0;
}

運行截圖:
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章