日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

C语言中信号函数(signal)的使用

發布時間:2023/11/30 编程问答 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C语言中信号函数(signal)的使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

先來簡單談談C語言中的信號(signal)

首先,signal是C語言庫中的函數,它實際上是軟中斷,也就是軟件發出的終端,本質來說,類似于int n。

對于接收到該軟中斷信號的進程,就會停下手頭的工作,轉而去執行信號處理程序 signal handler

對于這一點,是與硬件中斷的方式類似的。與硬件中斷類比學習會更容易!

因此,我們需要知道的是

  • 有哪些可用的軟中斷:就像硬件的除法零中斷、溢出中斷、外設中斷…
  • 軟中斷處理程序有哪些:就像中斷服務程序(位置信息在idt、ivt)
    • 默認的軟中斷服務程序:系統啟動的時候就初始化默認的中斷服務程序
    • 用戶自定義軟中斷服務程序:操作系統可自定義中斷服務程序

以及需要明白

  • 中斷何時被觸發(觸發條件)
  • 誰發出的中斷
  • 誰接收的中斷

以上,都是抽象層次的理解,我們縷一縷過程

  • 進程x執行
  • 進程x觸發中斷 --> 發出軟中斷
  • 進程y接收到中斷,進程x該干啥干啥
  • 進程y停止當前的任務,轉而執行中斷服務程序
  • 執行完成,進程y繼續執行自己的程序
  • 至于進程x和y,可以的

    • 同一進程
    • 兩個進程
      • 父進程與子進程
      • 至于兩個獨立進程,先暫時不管,想做到這點至少得讓二者能夠通信

    好,整體框架梳理好了,我們慢慢說。

    有哪些信號

    All signals in c/c++

    上面的參考鏈接給出了所有的信號,現在我們簡單舉例說明。

    SignalValueDescription
    SIGCHLD17Child status has changed (POSIX). Signal sent to parent process whenever one of its child processes terminates or stops.See the YoLinux.com Fork, exec, wait, waitpid tutorial
    SIGCHLD信號:父進程子進程

    請看我的另一篇文章:信號量SIGCHLD的使用,如何讓父進程得知子進程執行結束,如何讓父進程區分多個子進程的結束

    信號處理函數

    參考:
    [1] Signals in C language
    [2] How to use signal handlers in C language?

    信號處理函數有兩類

    • 系統自帶的處理函數
    • 用戶自定義函數

    與底層硬件中斷是類似的,中斷向量表是自帶的,也允許用戶自定義。

    關于中斷的默認處理以及自定義處理,鏈接也有了。

    誰發出?誰接收?

    • 發出者:操作系統,或者某進程
    • 接收者:某進程

    至于細節,取決于你使用了哪個信號。每個信號的發出和接收動作和對象,以及默認的處理函數,都是規定好了的。

    如何執行?

    這個不再提了…就那么幾個套路,很容易。

    需要特別說明的是,如果進程1接收其他進程的信號X,在進程1執行信號x處理函數之前,如果多個信號x都發給了進程1,那么,這些信號可能被合并,進程1只執行1次信號處理函數。這可能的原因很多,比如操作系統很忙…


    下面這篇參考鏈接我還沒有處理:

    Handling multiple SIGCHLD

    總結

    以上是生活随笔為你收集整理的C语言中信号函数(signal)的使用的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。