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 /
// #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,對對應線程所在的程序日誌文檔進行分析,比如