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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

sigprocmask, sigpending, sigsuspend的用法

發布時間:2025/3/8 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 sigprocmask, sigpending, sigsuspend的用法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

sigset_t set

sigemptyset(&set) :清空阻塞信號集合變量

sigfillset(&set)?:添加所有的信號到阻塞集合變量里

sigaddset(&set,SIGINT):添加單一信號到阻塞信號集合變量

sigdelset(&set,SIGINT):從阻塞信號集合變量中刪除單一信號

?

void handler(int sig)????//信號處理函數的實現

{

???printf("SIGINT sig");

}

?

?

功能:返回在阻塞期間接收到阻塞信號的集合。

?{
??????? sigset_t set;???????????? //定義阻塞信號集的變量
??????? sigemptyset(&set);??????? //清空變量set的阻塞信號
??????? sigaddset(&set,SIGINT);?? //添加將要阻塞的信號"SIGINT"到阻塞信號集變量
??????? sigdelset(&set,SIGINT);?? //從已有的阻塞信號集變量中刪除阻塞信號"SIGINT"
??????? sigaddset(&set,SIGQUIT);? //添加將要阻塞的信號"SIGQUIT"到阻塞信號集變量
??????? sigprocmask(SIG_SETMASK,&set,NULL);// 將當前的阻塞信號集合變量set設置為該進程信號阻塞列表
??????? while(1);???????????????? //
??????? return 0;
}

?

?

sigpending 函數:

?

printf( "set is %8.8ld.\n", set );

??? sigpending( &pset );
??? printf( "Pending set is %8.8ld.\n", pset );

??? kill( getpid(), SIGINT );
??? sigpending( &pset );
??? printf( "Pending set is %8.8ld.\n", pset );

??? kill( getpid(), SIGQUIT );
??? sigpending( &pset );
??? printf( "Pending set is %8.8ld.\n", pset );

?

sigsuspend函數(感覺場景不太普遍)

功能:它有一套屬于自己的屏蔽信號mask,能夠選擇性接收某些信號。在接收到可行信號(也即是沒有被屏蔽的信號)之前,運行到它時,它會一直懸掛著,有點類似pause()函數。接受到可行信號后,它會退出懸掛并執行相應的信號函數。接收到的信號源:1.之前運行sigprocmask()函數中阻塞的信號;2.懸掛后接受到的信號。

?

sigsuspend的整個原子操作過程為:
(1) 設置新的mask阻塞當前進程;
(2) 收到信號,恢復原先mask;
(3) 調用該進程設置的信號處理函數;
(4) 待信號處理函數返回后,sigsuspend返回。

?

sleep也是用sigsuspend實現的。

?

http://blog.csdn.net/elbort/article/details/7594772

?

?

http://blog.csdn.net/todd911/article/details/17319591

?

總結

以上是生活随笔為你收集整理的sigprocmask, sigpending, sigsuspend的用法的全部內容,希望文章能夠幫你解決所遇到的問題。

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