當前位置:首頁 » 操作系統 » siglinux

siglinux

發布時間: 2023-01-04 09:45:46

linux系統上信號發送和信號接收講解

用於進程間通信,通信機制由操作系統保證,比較穩定。

在linux中可以通過kill -l查看所有信號的類型。

kill -信號類型 進程ID

int kill(pid_t pid, int sig);
入參pid :
pid > 0: 發送信號給指定的進程。
pid = 0: 發送信號給 與調用kill函數進程屬於同一進程組的所有進程。
pid < 0: 取|pid|發給對應進程組。
pid = -1:發送給進程有許可權發送的系統中所有進程。
sig :信號類型。
返回值 :成功:0;失敗:-1 (ID非法,信號非法,普通用戶殺init進程等權級問題),設置errno
以OpenHarmony源碼為例,應用ANR後,AbilityManagerService會通知應用mp堆棧信息,就是通過信號量做的。

頭文件位置 :
include <signal.h>
函數解釋 :
typedef void (*sighandler_t)(int);
sighandler_t signal(int signum, sighandler_t handler);
當接收到指定的信號signum時,就會跳轉到參數handler指定的函數執行。其中handler的入參是信號值。

函數原型

signum參數指出要捕獲的信號類型,act參數指定新的信號處理方式,oldact參數輸出先前信號的處理方式(如果不為NULL的話)。
sigaction結構體

sa_handler 信號處理函數
sa_mask 在處理該信號時可以暫時將sa_mask 指定的信號集擱置
sa_flags 指定一組修改信號行為的標志。 它由以下零個或多個的按位或組成
   SA_RESETHAND:當調用信號處理函數時,將信號的處理函數重置為預設值SIG_DFL
   SA_RESTART:如果信號中斷了進程的某個系統調用,則系統自動啟動該系統調用
   SA_NODEFER :一般情況下, 當信號處理函數運行時,內核將阻塞該給定信號。但是如果設置了 SA_NODEFER標記, 那麼在該信號處理函數運行時,內核將不會阻塞該信號
sa_restorer 是一個替代的信號處理程序,當設置SA_SIGINFO時才會用它。
相關函數
int sigemptyset( sigset_t *set);
sigemptyset()用來將參數set信號集初始化並清空。
執行成功則返回0,如果有錯誤則返回-1。
完整示例

❷ linux下關於signal(SIGUSR1,sig_usr)==SIG_ERR的錯誤如何解決

SIG_ERR它表示一個函數指針,如果不出錯的話,signal()會返回以前的信號處理函數的地址。
你的SIGUSER1定義了嗎?默認的話,系統沒有這一個信號
SIG_ERR是這樣定義的
#define SIG_ERR (void (*) () ) -1

❸ linux中的signal怎麼使用

signal函數的定義很復雜,但是它的用法還是比較簡單的,你記住它的兩個參數就可以了。signal有兩個參數sig和func,signal這個函數是用來接收信號並處理的,所以sig參數表示將要處理哪種類型的信號,而func參數是一個函數指針,用來指定信號的處理函數,也就是當程序接收到sig那個類型的信號後,就會調用func指針指向的函數。func指針的原型是:
void (*func) (int)
所以信號的處理函數必須是一個返回void,只有一個int類型參數的函數。
比如如果程序需要處理Ctrl+C組合鍵產生的信號,就可以這樣使用signal函數:
(void) signal(SIGINT, myfunc);
而myfunc函數可以這樣定義:
void myfunc(int sig)
{
printf("Hello, the signal is %d\n", sig);
// 因為現在處理的是Ctrl+C信號,所以下面要
// 恢復程序對Ctrl+C的默認反應
(void) signal(SIGINT, SIG_DFL);
}

熱點內容
spl編程 發布:2025-05-11 00:25:14 瀏覽:63
linux搭建android開發環境 發布:2025-05-11 00:18:45 瀏覽:947
web本地存儲 發布:2025-05-11 00:13:33 瀏覽:360
為什麼暗格里的密碼搜不到了 發布:2025-05-11 00:13:31 瀏覽:942
oracle存儲過程使用變數 發布:2025-05-11 00:10:07 瀏覽:741
用安卓下載蘋果的軟體叫什麼 發布:2025-05-11 00:08:22 瀏覽:115
斷牙腳本 發布:2025-05-11 00:04:21 瀏覽:68
sim卡的密碼怎麼設置密碼 發布:2025-05-10 23:41:09 瀏覽:716
自定義緩存註解 發布:2025-05-10 23:40:06 瀏覽:118
sqltext類型長度 發布:2025-05-10 23:30:21 瀏覽:979