1. 程式人生 > >linux signal 函式對中斷的應用

linux signal 函式對中斷的應用

在https://blog.csdn.net/engineer_james/article/details/83867466 寫一個android程序後臺的過程

但是我們用CPP C 開發避免不了 分配記憶體或者 指標,如果在linux 程序跑的時候,出現死了或者退出導致中斷,但是資源沒有正常釋放,造成資源浪費,所以需要用signal 處理

signal是linux系統的對所有動作的捕捉,然後進行處理
/* SIGNALS /
// #define SIGINT 2 /
interrupt Ctrl-C*/
// #define SIGILL 4 /* illegal instruction - invalid function image /
// #define SIGFPE 8 /

floating point exception /
// #define SIGSEGV 11 /
segment violation /
// #define SIGTERM 15 /
Software termination signal from kill /
// #define SIGBREAK 21 /
Ctrl-Break sequence /
// #define SIGABRT 22 /
abnormal termination triggered by abort call */

訊號      取值          預設動作   含義(發出訊號的原因)
SIGHUP      1           Term    終端的結束通話或程序死亡
SIGINT      2           Term    來自鍵盤的中斷訊號
SIGQUIT     3           Core    來自鍵盤的離開訊號
SIGILL      4           Core    非法指令
SIGABRT     6           Core    來自abort的異常訊號
SIGFPE      8           Core    浮點例外
SIGKILL     9           Term    殺死
SIGSEGV     11          Core    段非法錯誤(記憶體引用無效)
SIGPIPE     13          Term    管道損壞:向一個沒有讀程序的管道寫資料
SIGALRM     14          Term    來自alarm的計時器到時訊號
SIGTERM     15          Term    終止
SIGUSR1     30,10,16    Term    使用者自定義訊號1
SIGUSR2     31,12,17    Term    使用者自定義訊號2
SIGCHLD     20,17,18    Ign     子程序停止或終止
SIGCONT     19,18,25    Cont    如果停止,繼續執行
SIGSTOP     17,19,23    Stop    非來自終端的停止訊號
SIGTSTP     18,20,24    Stop    來自終端的停止訊號
SIGTTIN     21,21,26    Stop    後臺程序讀終端
SIGTTOU     22,22,27    Stop    後臺程序寫終端
             
SIGBUS      10,7,10     Core    匯流排錯誤(記憶體訪問錯誤)
SIGPOLL                 Term    Pollable事件發生(Sys V),與SIGIO同義
SIGPROF     27,27,29    Term    統計分佈圖用計時器到時
SIGSYS      12,-,12     Core    非法系統呼叫(SVr4)
SIGTRAP     5           Core    跟蹤/斷點自陷
SIGURG      16,23,21    Ign     socket緊急訊號(4.2BSD)
SIGVTALRM   26,26,28    Term    虛擬計時器到時(4.2BSD)
SIGXCPU     24,24,30    Core    超過CPU時限(4.2BSD)
SIGXFSZ     25,25,31    Core    超過檔案長度限制(4.2BSD)
             
SIGIOT      6           Core    IOT自陷,與SIGABRT同義
SIGEMT      7,-,7       Term
SIGSTKFLT   -,16,-      Term    協處理器堆疊錯誤(不使用)
SIGIO       23,29,22    Term    描述符上可以進行I/O操作
SIGCLD      -,-,18      Ign     與SIGCHLD同義
SIGPWR      29,30,19    Term    電力故障(System V)
SIGINFO     29,-,-              與SIGPWR同義
SIGLOST     -,-,-       Term    檔案鎖丟失
SIGWINCH    28,28,20    Ign     視窗大小改變(4.3BSD, Sun)
SIGUNUSED   -,31,-      Term    未使用訊號(will be SIGSYS)

##signal 使用
signal函式的原型

typedef void (*sighandler_t)(int);
sighandler_t signal(int signum, sighandler_t handler);

引數1:signum 表示上面的動作編號
引數2:捕捉到訊號需要的函式地址
如果是 SIG_IGN表示 遮蔽該訊號 而設定 SIG_DFL 表示恢復預設行為 就是繼續捕捉

所以在初始化的時候,設定需要捕捉的訊號

        signal(SIGINT, signal_handler);//ctrl+c  signal_handler捕捉訊號需要處理的函式
void signal_treatment(int param){
	signal(SIGINT, SIG_IGN);//忽略後面的訊號捕捉
	//釋放資源
	exit(0);
}

用起來很簡單,但是對資源釋放很有作用

相關推薦

linux signal 函式中斷應用

在https://blog.csdn.net/engineer_james/article/details/83867466 寫一個android程序後臺的過程 但是我們用CPP C 開發避免不了 分配記憶體或者 指標,如果在linux 程序跑的時候,出現死了或

linux signal函式使用

#define SIG_IGN (void (*)())1 alarm(設定訊號傳送鬧鐘) 相關函式 signal,sleep 表頭檔案 #include 定義函式 unsigned int alarm(unsigned int seconds); 函式說明 alarm()用來設定訊號SIGALRM在經過引

linux驅動開發學習--中斷和核心定時器的學習筆記

一 中斷理解                             &nb

三十三、Linux 程序與訊號——中斷系統呼叫和函式可重入性

33.1 中斷系統呼叫 程序呼叫 “慢” 系統呼叫時,如果發生了訊號,核心會重啟系統呼叫。 慢系統呼叫 可能會永久阻塞的系統呼叫 從終端裝置、管道或網路裝置上的檔案讀取 向上述檔案寫入 某些裝置上的檔案開啟 pause 和 wait 系統呼叫

三十、Linux 程序與訊號——訊號的概念及 signal 函式

30.1 訊號的基本概念 訊號(signal)機制是Linux 系統中最為古老的程序之間的通訊機制,解決程序在正常執行過程中被中斷的問題,導致程序的處理流程會發生變化 訊號是軟體中斷 訊號是非同步事件   不可預見 訊號有自己的名稱和編號 訊號和異常處理機制

Linux平臺下基於BitTorrent應用層協議的下載軟體開發--Main函式模組(main.c)

#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <string.h> #include <malloc.h> #include

Linux Signal (6): 傳送訊號的kill和raise 函式

1. 函式說明: kill和raise是用來發送訊號的: kill把訊號傳送給程序或程序組,它不僅可以中止程序,也可以向程序傳送其他訊號; raise把訊號傳送給(程序)自身. 它們的原型如下: #include <signal.h> #include <s

Linux訊號signal介紹,signal()函式,sigaction()函式

訊號(signal)是一種程序間通訊機制,它給應用程式提供一種非同步的軟體中斷,使應用程式有機會接受其他程式活終端傳送的命令(即訊號)。應用程式收到訊號後,有三種處理方式:忽略,預設,或捕捉。程序收到一個訊號後,會檢查對該訊號的處理機制。如果是SIG_IGN,就忽略該訊號;如果是SIG_DFT,則會採

Linux程式設計signal函式使用

題目: 編寫一段程式,使用系統呼叫fork( )建立兩個子程序,再用系統呼叫signal( )讓父程序捕捉鍵盤上來的中斷訊號(即按ctrl+c鍵),當捕捉到中斷訊號後,父程序用系統呼叫kill( )向兩個子程序發出訊號,子程序捕捉到訊號後,分別輸出下列資訊後終止:     

函式指標&回撥函式&linux中的signal函式

1.  int (*func)();函式指標,指向的函式為空引數,返回整型; 2. 回撥函式是一個程式設計師不能顯式呼叫的函式;通過將回調函式的地址傳給被呼叫者從而實現呼叫。 回撥函式是一個通過函式指標呼叫的函式。如果你把函式的指標(地址)作為引數傳遞給另一個函式,當這個指標

Linux C 函式指標應用---回撥函式

    (這裡引用了知乎上一些知友的回答,感覺不錯,有助於理解,這裡引用作為借鑑,如有冒犯,煩請告知)     我們先來回顧一下函式指標,函式指標是專門用來存放函式地址的指標,函式地址是一個函式的入口地址,函式名代表了函式的入口地址。當一個函式指標指向了一個函式,就可以通過

Linux 課程筆記 Nginx深入應用實踐

排序 課程筆記 chrom 標簽 主域 net request load cli 1 關於Nginx模塊 Nginx使用不同的模塊實現不同的功能,主要有2組重要的模塊: (1) Nginx core modules(必需的) 包括Main、Events (2)

STM32 中斷應用概覽

arm emp nvic ann 參考手冊 其它 文件中 type 嵌套 本章參考資料《 STM32F4xx 中文參考手冊》第十章-中斷和事件、《ARM Cortex?-M4F 技術參考手冊》 -4.3 章節: NVIC 和 4.4 章節: SCB—4.4.5 的 AIRC

linux驅動編寫之中斷處理

類型 div 應該 urn 處理方式 com pre turn 申請 一、中斷 1、概念 學過單片機的應該非常清楚中斷的概念,也就是CPU在正常執行程序過程中,出現了突發事件(中斷事件),於是CPU暫停當前程序的執行,轉去處理突發事件。處理完畢後,CPU又返回被

linux 抓包 tcpdump 簡單應用

lai 包含 數字 -s 格式 home 鏈路層 expr art 在linuxserver上,常常要定位網絡問題,就須要用到抓包。 比如:tcpdump -X -s 0 host 10.17.81.22 and port 9999 -w /home/text.ca

Linux同步與相互排斥應用(零):基礎概念

使用 line 關系 並發執行 來看 文章 必須 生產者 而且 【版權聲明:尊重原創,轉載請保留出處:blog.csdn.net/shallnet 或 .../gentleliu,文章僅供學習交流,請勿用於商業用途】 當操作系統進入多道批處理

linux驅動開發之framebuffer應用編程實踐(一)

linux驅動開發之framebuffer驅動 1、framebuffer應用編程 (1)打開設備文件 (2)獲取設備信息 宏定義的命令在/linux/fb.h中 不可變信息FSCREENINFO,使用ioctl參數有FBIOGET_FSCREENINFO宏名,表示用ioctl從

怎樣在Linux中用Vim文件進行密碼保護

linux文件加密Vim 有個 -x 選項,這個選項能讓你在創建文件時用它來加密。一旦你運行下面的 vim 命令,你會被提示輸入一個密鑰:$ vim -x file.txt 警告:正在使用弱加密方法;參見 :help ‘cm‘ 輸入加密密鑰:******* 再次輸入相同密鑰:*******如果第二次輸入的密鑰

Linux中vim編輯中斷提示

vim編輯器vim編輯文件的時候如果修改內容時突然斷開連接,之後重新連接會出現如上圖的消息提示,那麽這一段提示是什麽意思呢,其實真正有用的提示只有開頭和結尾的兩句:開頭的提示大致意思就是“找到一個叫/oldboy/.txt.swp臨時文件”,倒數第二行也是這個意思,最重要的是最後一行,一共有六個選擇,根據下表

Linux系統內高CPU的監控及日誌分析

文件 mos anti sage them 其中 generate ted cpu 使用linux系統時,占用cpu資源過高和,用腳本排查: 1,實時監控,一旦有cpu占用高的進程,程序啟動; 2,再對進程分析,得出對應線程; 3,對對應線程所在的程序日誌文檔進行分析,比如