信號-庫函數signal和CTRL-C

庫函數signal和CTRL-C

進程接受和發出的信號(signal)相關的設置函數signal,和ctrl-c的處理原理

ctrl-c是通過中斷信號切斷當前程序運行的。

中斷是信號的一種,信號有用戶、內核、進程三個來源。
用戶的一些特定操作可以被設置爲信號;
而內核通過信號接受程序報錯或利用信號通知進程特定事件的發生(利用信號實現內核和進程通信);
進程操作產生的信號被稱爲同步信號,用戶操作產生的信號稱爲異步信號。

和信號相關的一個重要函數是<signal.h>(csignal)中的signal():
在這裏插入圖片描述
一般用法是

signal(信號名,處理方式);

較常用信號名的是SIGINT(中斷)和SIGQUIT(退出)
處理方式有三種:

  • SIG_IGN:忽略信號,有無這個信號都不做響應。如果在某個進程(程序)中對信號SIGINT(中斷)設置了處理方式SIG_IGN(忽略),那麼ctrl-c就不再能如常退出這個進程(程序)了。
    (tips:還可通過CTRL-\發出SIGQUIT信號退出)
  • SIG_DEF:根據頭文件中的默認設置對信號作出反應。
  • 函數指針:( 返回值類型爲void、有一個int類型參數的函數指針).函數指針指向自定義的函數,也就是說通過這個設置能夠對一些信號進行自定義的處理。

信號名是頭文件中定義的宏,具體可通過man 7 signal 獲知:
在這裏插入圖片描述

注意:爲了避免因爲錯誤的設置無法退出某些進程,有兩個信號不能被忽略、掛起、阻塞,它們分別是SIGKILL和SIGSTOP.

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