1. 程式人生 > >linux系統程式設計之訊號(三):訊號的阻塞與未決

linux系統程式設計之訊號(三):訊號的阻塞與未決

/*************************************************************************
    > File Name: process_.c
    > Author: Simba
    > Mail: [email protected]
    > Created Time: Sat 23 Feb 2013 02:34:02 PM CST
 ************************************************************************/

#include<sys/types.h>
#include
<sys/stat.h>
#include<unistd.h>
#include<fcntl.h>
#include<stdio.h>
#include<stdlib.h>
#include<errno.h>
#include<string.h>
#include<signal.h>

#define ERR_EXIT(m) \
    do { \
        perror(m); \
        exit(EXIT_FAILURE); \
    } while(0)

void handler(int sig);
void
 printsigset(sigset_t *set)
{
    int i;
    for (i = 1; i < NSIG; i++)
    {
        if (sigismember(set, i))
            putchar('1');
        else
            putchar('0');
    }
    printf("\n");
}

int flag = 0;

int main(int argc, char *argv[])
{
    if (signal(SIGINT, handler) == SIG_ERR)
        ERR_EXIT("signal error"
);
    if (signal(SIGQUIT, handler) == SIG_ERR)
        ERR_EXIT("signal error");

    sigset_t pset; // 64bit
    sigset_t bset;
    sigemptyset(&bset);
    sigaddset(&bset, SIGINT);
    sigprocmask(SIG_BLOCK, &bset, NULL);

    for (; ;)
    {
        sigpending(&pset);
        printsigset(&pset);
        sleep(1);
        if (flag == 1)
            sigprocmask(SIG_UNBLOCK, &bset, NULL);
    }

    return 0;
}

void handler(int sig)
{
    if (sig == SIGINT)
        printf("recv a sig=%d\n", sig);
    else if (sig == SIGQUIT)
    {
        printf("rev a sig=%d\n", sig);
        sigset_t uset;
        sigemptyset(&uset);
        sigaddset(&uset, SIGINT);
        sigprocmask(SIG_UNBLOCK, &uset, NULL);
        flag = 1;
    }

}

相關推薦

linux系統程式設計程序守護程序詳解及建立,daemon()使用

一,守護程序概述 Linux Daemon(守護程序)是執行在後臺的一種特殊程序。它獨立於控制終端並且週期性地執行某種任務或等待處理某些發生的事件。它不需要使用者輸入就能執行而且提供某種服務,不是對整個系統就是對某個使用者程式提供服務。Linux系統的大多數伺服器就是通過守護程序實現的。常見的守護程序包括系

linux系統程式設計程序程序退出exit,_exit區別即atexit函式

一,程序終止有5種方式: 正常退出: 從main函式返回 呼叫exit 呼叫_exit 異常退出: 呼叫abort 由訊號終止 二,exit和_exit區別: 關於_exit():        #include <unistd.h>     

linux系統程式設計程序程序生命週期PCB程序控制塊

本節目標: 程序狀態變遷程序控制塊程序建立程序撤消終止程序的五種方法 一,程序狀態變遷 程序的三種基本狀態 就緒(Ready)狀態 當程序已分配到除CPU以外的所有必要的資源,只要獲得處理機便可立即執行,這時的程序狀態稱為就緒狀態。 執行(Running)狀態 當程序已獲得

linux系統程式設計訊號訊號阻塞未決

/*************************************************************************     > File Name: process_.c     > Author: Simba     > Mail: [email 

Choerodon 的微服務服務註冊發現

本文是 Choerodon 的微服務之路系列推文第三篇。在上一篇《Choerodon的微服務之路(二):微服務閘道器》中,介紹了Choerodon 在搭建微服務閘道器時考慮的一些問題以及兩種常見的微服務閘道器模式,並且通過程式碼介紹了Choerodon 的閘道器是如何實現的。本篇文章將介紹Choer

Linux 學習使用者管理命令詳解

使用者管理命令詳解 useradd [options] USERNAME ​ -u UID(>=500,並且與其他使用者無重複) ​ -g GID(基本組,組必須事先存在) ​ -G GID,… (附加組,組必須事先存在) useradd -G mygroup us

Linux 網路程式設計 全解--------TCP次握手、資料傳輸、四次揮手、滑動視窗

寫在前面:今天中秋佳節,首先祝大家佳節快樂,身體健康,恭喜發財。吃也吃了,喝也喝了,玩也玩了,乾點正事吧。 說一下寫這個系列的目的,隨著對物聯網開發的深入,越來越覺得自己網路基礎知識的薄弱,雖然開發過程中不需要對網路基礎有很深入的瞭解照樣能進行,但有一些問題仍然是不知其因,

Python黑帽子 黑客滲透測試程式設計取代netcat

netcat是個計算機網路公用程式,用來對網路連線TCP或者UDP進行讀寫。 透過埠3333(-l 監聽狀態listen)從機器foo複製到機器bar複製檔案: [email protected]$ nc -l -p 3333 > backup.

自學Linux系統的小總結

shell的環境與功能: shell是作業系統與使用者互動的一個介面 Ubuntu作業系統上的shell有bash,bash也是一個命令。 命令補全是對輸入命令的簡單臆想,用tab鍵,單擊補全,雙擊推測可能的命令,補全為操作命令。 命令歷史:對命令操作的痕跡,有條件儲存。命令歷史清空

Linux系統程式設計學習筆記1-檔案的I/O操作

概述 在Linux系統下,通常以一個非負整數來代指一個開啟的檔案,這些檔案可以包括終端,socket,裝置,普通檔案等等。規定的三個標準的檔案描述符為0,1,2下面分別介紹(在互動式shell中,這些檔案描述符通常指向shell執行所在的終端): 檔案描述

Java 併發程式設計 volatile

都是快取惹的禍害 快取一致性協議: 當某個CPU核心寫資料時,如果發現這個變數為共享變數,即在其他CPU快取中也有副本,就會通知其他CPU將改變數的快取置為無效, 其他CPU需要從記憶體重新讀取。 MESI 的狀態 案例: 資料有

Linux下的訊號----捕捉訊號sleep模擬

Linux下的訊號(一):訊號的基本概念與產生 Linux下的訊號(二):阻塞訊號 一,什麼是捕捉訊號? 1,捕捉訊號:訊號處理方式三種方式中的一種,意思是既不忽略該訊號,又不執行訊號預設的動作,而是讓訊號執行自定義動作。捕捉訊號要使用signal函式

學生資訊管理系統新增成績資訊流程

一、新增學生成績資訊的一般流程 二、根據已知資訊新增未知資訊的流程 三、ExecuteSQL的查詢流程 流程簡單概括: 首先,對文字框進行判斷:是否為空,是否為數字; 其次,對文字框內容進行判斷,連線資料庫看是否

爬蟲Scrapy框架學習使用訊號Signals

""" Extension for collecting core stats like items scraped and start/finish times """ import datetime

hadoop生態系統學習java實現上傳檔案本地或ftp至hdfs

在上一篇博文中,我們講了如何編寫、執行、測試一個MR,但是hdfs上的檔案是手動執行命令從本地linux上傳至hdfs的。在真實的執行環境中,我們不可能每次手動執行命令上傳的,這樣太過繁瑣。那麼,我們可以使用hdfs提供的java api實現檔案上傳至hdfs,

一個鹹魚的Python爬蟲爬取網頁圖片

you os.path odin 路徑 生成 存在 parent lose exist 學完Requests庫與Beautifulsoup庫我們今天來實戰一波,爬取網頁圖片。依照現在所學只能爬取圖片在html頁面的而不能爬取由JavaScript生成的圖。所以我找了這個網站

Linux小小白入門教程Linux資料夾

學習一個作業系統的使用,最先應該搞清楚的是他的C盤、D盤、E盤。 一、Linux的資料夾 Linux和Windows最大的區別是,Windows有C盤、D盤的概念,但是在Linux上沒有碟符的概念。Linux只有一個碟符,那就是“/”。你沒有看錯,就是一個斜杆。這個

Python基本資料型別

元祖tuple    是對列表的二次加工,書寫格式為括號(),裡面放元素    元組的一級元素不可被修改,且不能被增加和刪除    一般寫元組的時候,推薦在最後加入逗號,   能加則加 建立元組

胡八一Javajava集合概述

JAVA集合概述 (一)、Collection 和Iterator介面 import java.util.ArrayList; import java.util.Collection; import java.util.HashSet; public class Te

資料結構演算法陣列

陣列看起來簡單基礎,但是很多人沒有理解這個資料結構的精髓。帶著為什麼陣列要從0開始編號,而不是從1開始的問題,進入主題。 一、 如何實現隨機訪問 1) 陣列是一種線性資料結構,用連續的儲存空間儲存相同型別資料: I) 線性表:陣列、連結串列、佇列、棧 ;非線性表