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

歡迎訪問 生活随笔!

生活随笔

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

windows

UNIX环境C - 系统信号

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

一.信號的概念

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

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

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

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

三、信號的捕獲與處理

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

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

四、信號的發(fā)送

  1.終端發(fā)送:kill? -sig? pid ? ? ? ? ? ? ? ?? 2.函數(shù)調(diào)用:int ? kill(pid_t pid,int sig)

  3.有關(guān)時間的信號

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

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

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

? ? ?

   

五、信號屏蔽

  1.信號集

    a.信號集的創(chuàng)建

      1)創(chuàng)建信號集? 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)

??????? ? 功能:獲取未決狀態(tài)的信號 ? ?

六、計時器

? ? ? 操作系統(tǒng)維護了三個計時器

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

? ? ? ? ? 虛擬計時器:記錄程序在用戶態(tài)耗費的時間

? ? ? ? ? 實用計時器:記錄程序在用戶態(tài)和內(nèi)核態(tài)耗費的時間和

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

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

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

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

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

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

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

? ? ? ?? curr_value:

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

? ? ? ? ? ? ? ? ?? it_value:第一次時鐘信號產(chǎn)生的時間

轉(zhuǎn)載于:https://www.cnblogs.com/goul/p/9368317.html

總結(jié)

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

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。