当前位置: 首页 > 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://www.dtcms.com/wzjs/81941.html

相关文章:

  • 郫县做网站淄博seo推广
  • 网站正在建设中动画百度账户登录
  • 公司网站建设的目标百度关键词排名点击器
  • 综合门户网站什么意思网络营销工具平台
  • 做网站点击挣钱不石家庄seo
  • 自己的网站做微信接口平台重庆森林为什么不能看
  • 请问下网站开发怎么弄seo优化行业
  • 网站域名使用期哪有恶意点击软件买的
  • 做网站用哪个编程语言深圳seo优化推广
  • 重庆转店铺哪个网站平台好营销策划公司介绍
  • 新手如何做网站运营晋中网站seo
  • 深圳建设银行分行网站宁德市属于哪个省
  • 河北省建设中心网站中国疫情最新数据
  • 网站建设 平易资源优化排名网站
  • 网页设计与网站建设案例课堂seo搜索优化怎么做
  • 淮安做网站的有多少钱厦门seo排名优化方式
  • 石家庄医疗网站建设网盘搜索引擎
  • 商丘网站网站建设关键词歌曲免费听
  • 行情网免费网站大全国外搜索引擎入口
  • 菜鸟必读 网站被入侵后需做的检测 2线上培训机构有哪些
  • 开发做一个网站的流程推广管理
  • 网页版百度网盘长春seo按天计费
  • 无锡城乡建设局网站运营培训
  • 易语言网站开发手机百度网址大全首页
  • 做网站电话销售的话术网站seo专员
  • 世界杯网页设计素材seo搜索引擎推广什么意思
  • uni做网站首页网上营销的平台有哪些
  • 丹东市房屋建设委员会网站下载百度极速版
  • 做网站代码保密协议seo搜索推广
  • 写wordpress导航西安seo关键词排名优化