日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

Linux 使用sigaction查询或设置信号处理方式

發布時間:2023/12/10 linux 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux 使用sigaction查询或设置信号处理方式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、概述

Linux的系統調用函數sigaction()可以用來查詢或設置信號處理方式。

函數聲明為:

#include <signal.h>int sigaction(int signum, const struct sigaction *act, struct sigaction *oldact);

如果執行成功返回0,否則返回-1。其中,參數表示的含義如下:

  • signum:要操作的信號,指定除SIGKILL和SIGSTOP以外其所有信號。?
  • act:要設置的對信號的新處理方式,sigaction指針結構體
  • oldact:原來對信號的處理方式

結構體struct sigaction描述對信號的處理,定義如下:

struct sigaction {void (*sa_handler)(int);void (*sa_sigaction)(int,siginfo_t *,void *);sigset_t sa_mask;int sa_flags;void (*sa_restorer)(void); }

在sigaction結構體中,參數表述如下:

  • sa_handler:函數指針,指向一個信號處理函數
  • sa_sigaction:獲得關于信號的更詳細信息
  • sa_flags:成員的值包含SA_SIGINFO時,系統將使用sa_sigaction函數作為信號處理函數,否則使用sa_handler
  • sa_mask:用來指定在信號處理函數執行期間需要被屏蔽的信號,信號自身會被自動放入進程的信號掩碼,不會重復執行

sa_flags成員用于指定信號的處理行為,它可以是以下值的“按位或”組合。

  • SA_RESTART:使被信號打斷的系統調用自動重新發起
  • SA_NOCLDSTOP:使父進程在它的子進程暫停或繼續運行時不會收到SIGCHLD信號
  • SA_NOCLDWAIT:使父進程在它的子進程退出時不會收到SIGCHLD信號,這時子進程如果也退出,也不會成為僵尸進程
  • SA_NODEFER:使對信號的屏蔽無效,即在信號處理函數執行期間,仍能發出這個信號
  • SA_RESETHAND:信號處理之后重新設置為默認的處理方式
  • SA_SIGINFO:使用sa_sigaction作為默認的信號處理函數

二、sigaction使用示例

#include <stdio.h> #include <unistd.h> #include <signal.h>static void sig_usr(int signum) {if(signum == SIGUSR1){printf("SIGUSR1 received \n");}else{printf("signal %d received\n",signum);} } int main(void) {struct sigaction sa_usr;sa_usr.sa_flags = 0;sa_usr.sa_handler = sig_usr;//管理信號處理函數sigcation(SIGUSR1,&sa_usr,NULL);//注冊信號處理方式printf("PID = %d\n",getpid());//打印當前進程pidwhile(1){//等待外部kill 當前進程}return 0; }

保存文件,編譯當前文件并執行:

# g++ testMysigcation.cpp -o run # ./run PID = 42273

現在打開另一個終端,用kill發送命令:

# kill -USR1 42273SIGUSR1 received

可見sig_usr接收到了發送的信號,并正確打印了結果。sigaction注冊信號處理函數時,不會自動重新發起被信號打斷的系統調用。

------分享知識,讓人愉悅,原創博文,支持請點贊。

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的Linux 使用sigaction查询或设置信号处理方式的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。