實驗:sigsuspend(),sigprocmask()

實驗:sigsuspend(),sigprocmask()

源代碼:
  1. /*
  2. * Program: pause_suspend.c
  3. * To test the difference between sigsuspend() and paus().
  4. * Author: zsl
  5. * Date: 2014-10-17
  6. * First release.
  7. * 參見網頁:http://blog.csdn.net/liwentao1091/article/details/6619089
  8. *
  9. * */
  10. #include <stdio.h>
  11. #include <stdlib.h>
  12. #include <signal.h>
  13. #include <unistd.h>
  14. #include <string.h>
  15. /*
  16. * Handler for SIGINT (Ctrl-C), SIGQUIT (Ctrl-\)
  17. * */
  18. void sig_func(int signo)
  19. {
  20. if ( SIGINT == signo ) // just print a line.
  21. {
  22. printf(" SIGINT is processing...\n ");
  23. }
  24. if ( SIGQUIT == signo ) // print a line and exit.
  25. {
  26. printf(" SIGQUIT is processing ...\n ");
  27. printf(" Now exiting ...\n ");
  28. exit(EXIT_SUCCESS);
  29. }
  30. }
  31. int main(void)
  32. {
  33. int i;
  34. sigset_t maskset, set_quit;
  35. sigemptyset(&maskset);
  36. sigemptyset(&set_quit); // initialize two sets.
  37. sigaddset(&maskset, SIGINT); // mask SIGINT
  38. sigaddset(&set_quit, SIGQUIT); // suspend SIGQUIT
  39. // signal the two signals: SIGINT, SIGQUIT
  40. signal(SIGINT, sig_func);
  41. signal(SIGQUIT, sig_func);
  42. while(1)
  43. {
  44. /* First to mask the signal of the process: SIGINT */
  45. sigprocmask(SIG_BLOCK, &maskset, NULL);
  46. for(i = 0; i < 10; i ++)
  47. {
  48. write(1, "* ", strlen("* "));
  49. sleep(1);
  50. }
  51. printf("\n");
  52. #if 1
  53. /*
  54. * while sigsuspend(), SIGQUIT is blocked.
  55. * but SIGINT is unblocked.
  56. * If you want to execute the two signals, you
  57. * should Ctrl-\, then Ctrl-C.
  58. * */
  59. printf("Before sigsuspend() ... \n");
  60. sigsuspend(&set_quit);
  61. #else
  62. sigprocmask(SIG_UNBLOCK, &maskset, NULL);
  63. pause();
  64. #endif
  65. }
  66. return 0;
  67. }
程序的運行:
在打印“* ?”的時候,SIGINT (Ctrl-C)被 阻塞了。而SIGQUIT沒有被阻塞,只要Ctrl-\就會終止程序。
在sigsuspend() 的時候,SIGQUIT (Ctrl-\)被阻塞了,而SIGINT 沒有被阻塞,只要 Ctrl-C 就會進入 signal handler 中執行。。
如果想在 sigsuspend() 中對兩個信號都進行處理,那么在 sigsuspend() 的時候先 SIGQUIT, 然后 SIGINT。
如下是執行效果圖:
171621185449929.png


來自為知筆記(Wiz)


轉載于:https://www.cnblogs.com/LinTeX9527/p/4031428.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/376579.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/376579.shtml
英文地址,請注明出處:http://en.pswp.cn/news/376579.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

后臺系統可擴展性學習筆記(七)Service Discovery與微服務

文章目錄應用層微服務架構服務注冊查詢 Service Discovery客戶端 Service DiscoveryDNS-SD DNS-based Service Discovery服務端 Service Discovery服務注冊與注銷自注冊模式第三方注冊模式總結參考應用層 在簡單的 3 層結構中&#xff0c;Web 服務層既要處理請求&#xff0c;又…

很久沒寫代碼了,這(那)幾天真是累死了。。。先寫一個幻方的程序吧

1 #include <stdio.h>2 #include <stdlib.h>3 #include <windows.h>4 5 #define EVEN_DOUBLE_4 4 //雙偶的最基本類型&#xff0c;4階雙偶6 #define SCREEN_SIZE 19 //屏幕顯示不變形的最大尺寸&#xff08;主要是因為窗口大小限制&#xff09;7 #defi…

#pragma once

http://baike.baidu.com/view/1276747.htm?fraladdin 轉載于:https://www.cnblogs.com/prayer521/p/4069040.html

后臺系統可擴展性學習筆記(八)Service Mesh

文章目錄網絡傳輸可靠性將微服務控制下沉到網絡棧&#xff1f;Sidecar從 Sidecar 到 Service MeshService Mesh 部署平臺參考網絡傳輸可靠性 從計網的學習過程中我們可以知道數據在網絡傳輸中可能會出現一些異常狀況&#xff1a; 數據丟失&#xff1a;數據包可能會到達一個緩…

關于Spring batch的學習之CSV2DB

最近在學習Spring batch相關的內容&#xff0c;網上也有不少Spring Batch相關的知識&#xff0c;不過大多都是使用xml進行配置的。這里是我用注解的方式進行相關的學習心得。 首先我們來看如何將一個文本文件中的內容導入到數據庫中。 我們先來看一下我們所需要的環境。我們這里…

后臺系統可擴展性學習筆記(九)Database Replication

文章目錄數據庫擴展一致性問題Replication &#xff08;復制&#xff09;異步復制同步復制半同步復制拓撲結構單主結構多主結構無主結構復制具體措施參考數據庫擴展 之前在第一章后臺系統可擴展性學習筆記&#xff08;一&#xff09;概要談到&#xff1a;理論上&#xff0c;有…

python中的sum函數.sum(axis=1)

看起來挺簡單的樣子&#xff0c;但是在給sum函數中加入參數。sum&#xff08;a&#xff0c;axis0&#xff09;或者是.sum(axis1) 就有點不解了 在我實驗以后發現 我們平時用的sum應該是默認的axis0 就是普通的相加 而當加入axis1以后就是將一個矩陣的每一行向量相加 例如&…

后臺系統可擴展性學習筆記(十)Database Partitioning

為了提升數據庫的處理能力&#xff0c;我們把單庫擴展成多庫&#xff0c;并通過更新同步機制&#xff08;即Replication&#xff09;來保證多份數據的一致性。然而&#xff0c;在 各種復制方案下&#xff0c;每個數據庫都持有一份完整數據&#xff0c;基于全量數據提供增刪改查…

基于FPGA的HDTV視頻圖像灰度直方圖統計算法設計

隨著HDTV的普及&#xff0c;以LCD-TV為主的高清數字電視逐漸進入蓬勃發展時期。與傳統CRT電視不同的是&#xff0c;這些高清數字電視需要較復雜的視頻處理電路來驅動&#xff0c;比如&#xff1a;模數轉換&#xff08;A/D Converter&#xff09;、去隔行&#xff08;De-interla…

后臺系統可擴展性學習筆記(十一)Database Denormalization

之前的兩篇筆記中談到了從單庫擴展到多庫以承載更多的請求量以及單庫&#xff08;表&#xff09;拆分成多庫&#xff08;表&#xff09;&#xff0c;打破單庫的性能瓶頸。 這都是為了應對大數據量下的措施。 然而&#xff0c;除卻數據量外&#xff0c;還有一個極其影響單庫性能…

Java Swing 影樓管理系統之登錄功能

開頭打廣告&#xff0c;Java1234.com。 首先&#xff0c;來個效果圖。 關鍵代碼 1&#xff0c;界面層 private void Jb_DengLuActionPerformed(java.awt.event.ActionEvent evt) {// TODO add your handling code here:String UserName this.Jb_UserNameTxt.getText();String …

Bdsyn百度手機助手是何物,它是怎樣神不知鬼不覺地安裝到你的電腦里的?

【電腦軟件管理中Bdsyn手機助手的問題】Bdsyn手機助手 is developed by Baidu, Inc. and is used by 10 users of Software Informer. 并不是本人安裝的&#xff08;應該是自己自己主動安裝的&#xff09;&#xff0c;卸載以后過幾天又會出如今軟件列表里。百度搜索卻無法搜索出…

后臺系統可擴展性學習筆記(十二)NoSQL

文章目錄NoSQL定義NoSQL種類鍵值存儲文檔存儲寬列存儲圖形數據庫NoSQL 意味著什么ACID vs. BASESQL or NoSQLNoSQL定義 不同于關系型數據庫&#xff0c;NoSQL 數據庫&#xff08;也叫非 SQL 或非關系型數據庫&#xff09;提供的數據存儲、檢索機制并不是基于表關系建模的。沒有…

android2.2應用開發之IccCard(sim卡或USIM卡)

tyle"margin:20px 0px 0px; font-size:14px; line-height:26px; font-family:Arial; color:rgb(51,51,51)"> 如果要做android通訊錄的聯系人的機卡混排顯示&#xff0c;由于手機卡類型的不同&#xff0c;導致手機卡存儲容量以及可以存儲信息不同&#xff0c;就要涉…

后臺系統可擴展性學習筆記(十三)緩存

文章目錄在哪兒加緩存緩存什么內容緩存原始查庫結果緩存數據對象怎么查詢緩存結果預留緩存模式直讀模式直寫模式回寫式緩存繞寫式緩存提前刷新模式緩存滿了如何處理參考讀寫分離、分庫分表、反范式化、采用 NoSQL……如果這些擴展手段全都上了&#xff0c;數據響應依舊越來越慢…

[linux]gdb調試

使用gdb可以在命令行方便地調試&#xff0c;并且能以命令程序的方式調試源代碼。 常用命令簡寫print-p,step-s,next-n 進入gdb //方式一 gdb test//test 為可執行文件&#xff0c;使用-g編譯得到 //方式二 gdb -q //不顯示版權信息 file test //file命令打開文件 退出gdb quit …

后臺系統可擴展性學習筆記(十四)異步機制與MQ

對于 Web 服務而言&#xff0c;提升可擴展性的主要途徑是將耗時的同步工作改成異步處理&#xff0c;從而允許將這些工作“外包”給多個 Worker 去做&#xff0c;或者提前完成能夠預知的部分。 異步機制與可擴展性之間的關系需要從&#xff08;異步&#xff09;并行處理的優勢說…

RegisterClientScriptBlock與 RegisterStartupScript區別

Page.ClientScript.RegisterClientScriptBlock而用Page.ClientScript.RegisterStartupScript是因為&#xff1a;RegisterStartupScript 把script放置在ASP.NET page的底部&#xff0c;而RegisterClientScriptBlock把script放置在ASP.NET page的頂部&#xff0c;用RegisterClien…

【Web后端筆記】SQL Server與java數據類型對應

編號數據庫類型JDBC類型JDBC索引描述1intjava.lang.Integer4 2varcharjava.lang.String12 3charjava.lang.String1 4ncharjava.lang.String1 5nvarcharjava.lang.String12 6textjava.lang.String-1 7ntextjava.lang.String-1 8tinyintjava.lang.Integer-6 9intjava.lang.Intege…

后臺系統可擴展性學習筆記

整理了一下筆記目錄&#xff0c;將以前學習的一些知識串聯起來了&#xff0c;比如cdn、負載均衡、中間件&#xff0c;以前只是各自了解了一點&#xff0c;現在大概理清了后臺系統設計中他們各自的作用。 后臺系統可擴展性學習筆記&#xff08;一&#xff09;概要 后臺系統可擴展…