当前位置: 首页 > wzjs >正文

网站快照不更新了临海商用高端网站设计新感觉建站

网站快照不更新了,临海商用高端网站设计新感觉建站,查询网网站,广州网络优化最早的公司1. 信号的基本概念 1.1 什么是信号? 信号是一种软件中断,用于通知进程发生了某个事件。信号可以由内核、另一个进程或进程自身发送。信号通常用于以下目的: 通知错误:如非法内存访问(SIGSEGV)。控制进程…

1. 信号的基本概念

1.1 什么是信号?

信号是一种软件中断,用于通知进程发生了某个事件。信号可以由内核、另一个进程或进程自身发送。信号通常用于以下目的:

  • 通知错误:如非法内存访问(SIGSEGV)。
  • 控制进程:如终止进程(SIGTERM)、暂停进程(SIGSTOP)。
  • 用户交互:如用户按下Ctrl+C发送SIGINT信号。

1.2 信号的分类

  • 标准信号:传统的信号,如SIGINTSIGTERMSIGSEGV等。
  • 实时信号(可靠信号):信号编号从SIGRTMINSIGRTMAX,可以排队处理,不会丢失。

 

2. 常见的信号

以下是一些常见的Linux信号及其含义:

 

 

3. 信号的处理方式

每个信号都有其默认的处理方式,进程可以通过以下方式改变信号的处理方式:

3.1 默认处理方式

  • Terminate:终止进程。
  • Ignore:忽略信号。
  • Core Dump:生成核心转储文件并终止进程。
  • Stop:停止进程。
  • Continue:继续进程。

3.2 使用 signal 函数

signal函数用于设置信号的处理方式,但其行为在不同系统上可能有所不同,且不具备可重入性

 

 

参数解释:

  • signum

    • 含义:指定要处理的信号类型。例如,SIGINT(信号值为2)表示中断信号,通常由用户按下 Ctrl+C 触发。
    • 取值范围:通常使用标准信号(如 SIGINTSIGTERM 等)或实时信号(SIGRTMIN 到 SIGRTMAX)。
  • sighandler_t handler

    • 含义:指定信号的处理函数。当信号 signum 发生时,将调用该函数。
    • 类型sighandler_t 是一个函数指针,指向一个返回类型为 void 且接受一个 int 参数的函数。该参数为触发信号的信号编号。
    • 特殊值
      • SIG_IGN:忽略该信号。
      • SIG_DFL:恢复信号的默认处理方式。

 例子:

#include <signal.h>
#include <stdio.h>void handler(int sig) {printf("Received signal: %d\n", sig);
}int main() {if (signal(SIGINT, handler) == SIG_ERR) {perror("signal");return 1;}while (1) {printf("Waiting for signal...\n");sleep(1);}return 0;
}

 

3.3 使用 sigaction 函数

sigaction提供了更可靠和可重入的信号处理方式,推荐使用。

参数解释:

  • signum

    • 含义:和上面一致
  • const struct sigaction *act

    • 含义:指向一个 struct sigaction 结构体,该结构体指定了新的信号处理方式。
    • 结构体成员
      • sa_handler:类似于 signal 函数中的 handler,指定信号处理函数或 SIG_IGNSIG_DFL
      • sa_mask:一个信号集,指定在执行信号处理函数期间要屏蔽的额外信号。
      • sa_flags:一组标志,用于控制信号处理的行为。例如,SA_RESTART 表示在信号处理后重启被中断的系统调用。
  • struct sigaction *oldact

    • 含义:指向一个 struct sigaction 结构体,用于保存之前的信号处理方式。如果不需要保存,可以传递 NULL

 

例子:

#include <signal.h>
#include <stdio.h>
#include <unistd.h>void handler(int sig) {printf("Received signal: %d\n", sig);
}int main() {struct sigaction sa;sa.sa_handler = handler;sigemptyset(&sa.sa_mask);sa.sa_flags = 0;if (sigaction(SIGINT, &sa, NULL) == -1) {perror("sigaction");return 1;}while (1) {printf("Waiting for signal...\n");sleep(1);}return 0;
}

4. 信号屏蔽与等待

4.1 信号屏蔽

使用sigprocmask函数可以临时屏蔽某些信号,直到主程序完成关键操作。

参数解释:

  • how

    • 含义:指定如何修改当前的信号屏蔽集。
      • SIG_BLOCK:将 set 中的信号添加到当前信号屏蔽集中。
      • SIG_UNBLOCK:从当前信号屏蔽集中移除 set 中的信号。
      • SIG_SETMASK:将当前信号屏蔽集设置为 set
  • const sigset_t *set

    • 含义:指向一个信号集,指定要修改的信号。
    • 特殊值:如果 set 为 NULL,则 how 参数被忽略,oldset 将包含当前的信号屏蔽集。
  • sigset_t *oldset

    • 含义:指向一个信号集,用于保存之前的信号屏蔽集。如果不需要保存,可以传递 NULL

 

例子:

#include <signal.h>
#include <stdio.h>
#include <unistd.h>void handler(int sig) {printf("Received signal: %d\n", sig);
}int main() {sigset_t mask, oldmask;struct sigaction sa;sa.sa_handler = handler;sigemptyset(&sa.sa_mask);sa.sa_flags = 0;if (sigaction(SIGINT, &sa, NULL) == -1) {perror("sigaction");return 1;}// 初始化信号集并添加SIGINT到屏蔽集中sigemptyset(&mask);sigaddset(&mask, SIGINT);if (sigprocmask(SIG_BLOCK, &mask, &oldmask) == -1) {perror("sigprocmask");return 1;}// 执行关键操作printf("关键操作开始,SIGINT被屏蔽\n");sleep(5);printf("关键操作结束,恢复SIGINT\n");// 恢复之前的信号屏蔽if (sigprocmask(SIG_SETMASK, &oldmask, NULL) == -1) {perror("sigprocmask");return 1;}while (1) {printf("Waiting for signal...\n");sleep(1);}return 0;
}

4.2 信号等待

使用sigsuspend函数可以等待特定信号的发生。

 

参数解释:

  • const sigset_t *mask
    • 含义:指向一个信号集,指定在等待信号期间要临时设置的信号屏蔽集。
    • 行为:该函数会原子性地将当前的信号屏蔽集替换为 mask,然后挂起进程,直到接收到一个未屏蔽的信号。接收到信号后,进程的信号屏蔽集会恢复到原来的状态。

 例子:

#include <signal.h>
#include <stdio.h>
#include <unistd.h>void handler(int sig) {printf("Received signal: %d\n", sig);
}int main() {sigset_t mask, oldmask;struct sigaction sa;sa.sa_handler = handler;sigemptyset(&sa.sa_mask);sa.sa_flags = 0;if (sigaction(SIGINT, &sa, NULL) == -1) {perror("sigaction");return 1;}// 初始化信号集并添加SIGINT到屏蔽集中sigemptyset(&mask);sigaddset(&mask, SIGINT);if (sigprocmask(SIG_BLOCK, &mask, &oldmask) == -1) {perror("sigprocmask");return 1;}// 等待信号printf("等待信号...\n");sigsuspend(&oldmask);// 恢复信号屏蔽if (sigprocmask(SIG_SETMASK, &oldmask, NULL) == -1) {perror("sigprocmask");return 1;}return 0;
}


文章转载自:

http://6w9iXeSG.rgpsq.cn
http://sUBYGCis.rgpsq.cn
http://foM7BNQ0.rgpsq.cn
http://7kfy8qi4.rgpsq.cn
http://3k7jARre.rgpsq.cn
http://Cu5ZUa5z.rgpsq.cn
http://c0Y8hbUq.rgpsq.cn
http://G7Rodqkc.rgpsq.cn
http://tSGa2LAk.rgpsq.cn
http://ovovoxXv.rgpsq.cn
http://OoDO2MF5.rgpsq.cn
http://zXEwSBb6.rgpsq.cn
http://GkEAEDMb.rgpsq.cn
http://IwkkhVoN.rgpsq.cn
http://FcHjMwcv.rgpsq.cn
http://sLxGBBPv.rgpsq.cn
http://qd1GBDwV.rgpsq.cn
http://tgz1V6TD.rgpsq.cn
http://Nj2smRvp.rgpsq.cn
http://zFMOzhKu.rgpsq.cn
http://x2sqMSFb.rgpsq.cn
http://1xg4Tvqp.rgpsq.cn
http://F9Ytmynh.rgpsq.cn
http://XBxl3bdB.rgpsq.cn
http://3dyJrrQC.rgpsq.cn
http://hebXToEn.rgpsq.cn
http://r0wmcbVq.rgpsq.cn
http://dKgQzqUO.rgpsq.cn
http://ML1bN7oF.rgpsq.cn
http://mVFWCg3B.rgpsq.cn
http://www.dtcms.com/wzjs/702544.html

相关文章:

  • 如何做网站需求哪个网站专门做商铺啊
  • 成都市城乡建设管理局网站wordpress网格布局
  • 如何备份一个网站万州区最新消息
  • 名费网站制作视频教程免费发帖推广平台
  • 专业网站设计推荐成都 网页设计 兼职
  • 手机网站怎么做微信登陆网站服务器多少钱一年
  • 怎样建设卡盟网站钓鱼网站下载安装
  • 教学网站开发视频本地专业app开发公司
  • 公司网站开发的工作内容王烨琳
  • 网络推广和网站推广寻花问柳一家专门做男人的网站
  • 做快三网站如何在手机上自己制作软件
  • 沂水网站开发建设局工作总结
  • 接私活app有哪些平台短视频关键词seo优化
  • 网站解析需要什么wordpress 支付 api接口
  • 建设网站需要什么硬件上海嘉定网站设计
  • 有教做点心的网站吗上海嘉定
  • 高明网站设计哪家服务好网站加图标
  • wordpress怎么更换站点wordpress的根目录
  • 怎么给网站做seowordpress直接英文版
  • 建设银行无锡分行网站广告设计与制作合同范本
  • 访问量大的网站建网站 考虑
  • 创新创业教育课程网站建设方案做论坛网站赚钱吗
  • 流媒体网站建设方案图片设计师网站
  • 旅游电子商务网站建设的重要性dw外部网站链接怎么做
  • 上海网站建设 推荐站霸网络钢筋网片多少钱一吨
  • 信誉好的营销单页网站东莞企业名录大全
  • 建设网站员工招聘策划方案杭州公司注册地址租赁
  • 建筑工程信息网站什么是h5页面设计
  • 做一个自己的免费网站陕西网站建设报价
  • 凡科建站免费做网站必须学php吗