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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

UNIX环境C - 系统信号

發布時間:2025/3/14 windows 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 UNIX环境C - 系统信号 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一.信號的概念

  信號就是一種軟中斷,進程與進程之間信號的傳遞,都是通過內核來當做中轉站的,不能直接傳遞信號。

二、信號的分類(128位信號,不過可用信號就1~64除去32與33)

  1.不可靠信號(SIGHUP(1)~SIGSYS(31)):由于他是非實時信號,所以他會產生多次信號,但不支持排隊,并且只接受一次,因此信號有可能丟失,所以是不可靠信號。

  2.可靠信號(SIGRGMI(34)~SIGRTMAX(64)):由于他是實時信號,如果他產生多次信號,他會進行排隊,信號會被全盤接受,信號不會丟失,所以是可靠信號。

三、信號的捕獲與處理

   1.signal函數會注冊一個信號處理函數,需要在程序開始時初始化,如果程序接受到信號時,這個函數就會啟用。

   2.用fork函數創建的子進程會繼承父進程的信號處理方式,當vfork和exec組成而創建的子進程不會繼承父進程的信號處理方式。

四、信號的發送

  1.終端發送:kill? -sig? pid ? ? ? ? ? ? ? ?? 2.函數調用:int ? kill(pid_t pid,int sig)

  3.有關時間的信號

    a.睡眠(pause):沒有時間的限制,只有收到不可忽略的信號時,才會結束此函數,如果有信號處理函數,先執行信號處理函數,再返回-1

    b.睡眠(sleep):可手動控制時間的函數,若收到信號,則返回剩余的秒數,如沒收到信號,則等時間過完,返回0

    c.時鐘(alarm):鬧鐘一般需要與pause函數結合使用,當度過所設定的時間是,會返回一個SIGALRM信號,默認處理直接退出。

? ? ?

   

五、信號屏蔽

  1.信號集

    a.信號集的創建

      1)創建信號集? sigset_t*? set

      2)? 填滿信號集? sigfillset(sigset_t*? set)

      3)清空信號集 ?sigemptyset(sigset_t*? set)

      4)向信號集中添加信號 ??sigaddset(sigset_t*? set,int? signal)

      5)向信號集中刪除信號 sigdelset(sigset_t*? set,int siganl)

      6)? 測試信號集中的信號 ?? sigismember(const ? sigset_t*? set,int signal)

?  ? 2.屏蔽信號(signal mask)

    每一個進程都有一個屏蔽掩碼 , 里面包含了進程的屏蔽信號。

    信號的屏蔽不是選擇不接受信號,而是延時接受信號。

   ? ? ? 延時接受:設置屏蔽掩碼的目的是為了防止程序在進程一些敏感操作時,被打斷。當處理完敏感操作后,就會接受信號。可靠信號會排隊接受,不可靠信號只接受一次。

    int signprocmask(int how,const sigset_t *set,sigset_t * oldset)

? ? ? ? ? ? ? ? ? 功能:設置進程的信號掩碼(信號屏蔽碼)

? ? ? ? ? ? ? ? ? ?? how:修改信號掩碼的方式

? ? ? ? ? ? ? ? ? ? ? ? ? ? SIG_BLOCK:向信號掩碼中添加信號

? ? ? ? ? ? ? ? ? ? ? ? ? ? SIG_UNBLOCK:從信號掩碼中刪除信號

? ? ? ? ? ? ? ? ? ? ? ? ? ? SIG_SETMASK:用新的信號集替換舊的信號掩碼

? ? ? ? ? ? ? ? ? ? newset:新添加、刪除、替換的信號集,也可以為空

? ? ? ? ? ? ? ? ? ? oldset:獲取舊的信號掩碼

? ? ? ? ? ? int ?sigpending(sigset_t *set)

??????? ? 功能:獲取未決狀態的信號 ? ?

六、計時器

? ? ? 操作系統維護了三個計時器

? ? ? ? ? 真實計時器:程序的運行時間

? ? ? ? ? 虛擬計時器:記錄程序在用戶態耗費的時間

? ? ? ? ? 實用計時器:記錄程序在用戶態和內核態耗費的時間和

? ? ? ? ? 真實 ?= ?實用 ?+ ?進出的耗費 ?+ ?休眠。

? ? ? ? ? int getitimer(int which, struct itimerval *curr_value);

? ? ? ?? 功能:獲取之間設置的定時任務

? ? ? ?? which:計時器的類型

? ? ? ? ? ? ? ? ? ITIMER_REAL :真實時間,信號是:SIGALRM

? ? ? ? ? ? ? ? ? ITIMER_VIRTUAL:虛擬,信號:SIGVTALEM

? ? ? ? ? ? ? ? ? ITIMER_PROF :實用,信號:SIGPROF

? ? ? ?? curr_value:

? ? ? ? ? ? ? ? ?? it_interval:時鐘信號的間隔時間

? ? ? ? ? ? ? ? ?? it_value:第一次時鐘信號產生的時間

轉載于:https://www.cnblogs.com/goul/p/9368317.html

總結

以上是生活随笔為你收集整理的UNIX环境C - 系统信号的全部內容,希望文章能夠幫你解決所遇到的問題。

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