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

类似享设计的网站金融培训网站源码

类似享设计的网站,金融培训网站源码,最火的深圳网站建设,公司企业文化墙设计方案在 Unix/Linux 系统中,信号(Signal) 是一种进程间异步通信机制,用于通知进程发生发生了某种事件(如错误、用户中断等)。信号可以由内核、其他进程或进程自身发送,接收信号的进程会中断当前操作&…

在 Unix/Linux 系统中,信号(Signal) 是一种进程间异步通信机制,用于通知进程发生发生了某种事件(如错误、用户中断等)。信号可以由内核、其他进程或进程自身发送,接收信号的进程会中断当前操作,转而去执行预设的处理函数(或默认行为)。

信号的核心特性

  1. 异步性:信号的产生和传递是不确定的,进程无需主动等待,会在信号到达时被打断。
  2. 事件驱动:每种信号对应特定事件(如 SIGINT 对应 Ctrl+C 中断,SIGSEGV 对应段错误)。
  3. 预设处理方式:每个信号有默认处理行为(终止、忽略、暂停等),也可自定义处理函数。

常见信号及其含义

信号名编号含义及触发场景默认行为
SIGINT2用户按下 Ctrl+C 中断进程终止进程
SIGTERM15请求进程终止(kill 命令默认发送)终止进程
SIGKILL9强制终止进程(不可捕获/忽略)终止进程
SIGSEGV11段错误(访问无效内存地址)终止进程并生成核心转储
SIGPIPE13向已关闭的管道写入数据终止进程
SIGALRM14定时器超时(alarm() 函数触发)终止进程
SIGCHLD17子进程终止或状态改变忽略

信号处理函数

进程可以通过 signal()sigaction() 函数自定义信号的处理方式(信号捕获)。

1. signal() 函数(简单但功能有限)
#include <signal.h>// 信号处理函数原型:参数为信号编号
void (*signal(int signum, void (*handler)(int)))(int);
  • signum:要处理的信号(如 SIGINT)。
  • handler:处理函数指针,或特殊值:
    • SIG_IGN:忽略该信号。
    • SIG_DFL:恢复默认行为。
2. sigaction() 函数(更灵活,推荐使用)
#include <signal.h>int sigaction(int signum, const struct sigaction *act, struct sigaction *oldact);// 信号处理结构体
struct sigaction {void (*sa_handler)(int);  // 处理函数sigset_t sa_mask;         // 处理信号时阻塞的其他信号int sa_flags;             // 标志(如 SA_RESTART 重启被中断的系统调用)
};

示例代码:捕获 SIGINT 信号

#include <stdio.h>
#include <signal.h>
#include <unistd.h>// 自定义信号处理函数
void handle_sigint(int signum) {printf("\n收到 SIGINT 信号(Ctrl+C),程序不会退出!\n");
}int main() {// 注册 SIGINT 信号的处理函数struct sigaction sa;sa.sa_handler = handle_sigint;  // 设置处理函数sigemptyset(&sa.sa_mask);       // 不阻塞其他信号sa.sa_flags = 0;                // 默认标志if (sigaction(SIGINT, &sa, NULL) == -1) {perror("sigaction failed");return 1;}printf("程序运行中,按 Ctrl+C 测试信号处理...\n");while (1) {sleep(1);  // 无限循环等待信号}return 0;
}

运行效果
按下 Ctrl+C 后,程序不会终止,而是执行 handle_sigint 函数并继续运行(默认行为被覆盖)。

信号发送与处理流程

  1. 信号发送
    可通过 kill()pthread_kill() 向进程发送信号:

    #include <sys/types.h>
    #include <signal.h>// 向进程 pid 发送 signum 信号
    int kill(pid_t pid, int signum);
    

    例如:kill(12345, SIGTERM) 向 PID 为 12345 的进程发送终止请求。

  2. 信号处理流程

    • 信号产生后,内核将其标记到目标进程的信号掩码中。
    • 进程从内核态返回用户态时,检查是否有未处理的信号。
    • 若有,暂停当前执行,转而去执行该信号的处理函数。
    • 处理完成后,回到被中断的位置继续执行。

注意事项

  1. 不可靠信号与可靠信号

    • 早期 Unix 信号(如 SIGINTSIGTERM)为不可靠信号(编号 < 32),可能丢失且不支持排队。
    • POSIX 扩展的实时信号(SIGRTMINSIGRTMAX)为可靠信号,支持排队和携带附加数据。
  2. 信号安全函数
    信号处理函数中应使用异步信号安全函数(如 write_exit),避免调用 printfmalloc 等非安全函数(可能导致死锁)。

  3. SIGKILLSIGSTOP
    这两个信号不可捕获、不可忽略、不可自定义处理,用于强制终止或暂停进程(系统级控制)。

  4. 信号屏蔽
    可通过 sigprocmask() 暂时屏蔽某些信号,防止其在关键操作(如数据更新)中打断进程。

应用场景

  • 进程终止控制(如 kill 命令发送 SIGTERM)。
  • 异常处理(如捕获 SIGSEGV 记录崩溃信息)。
  • 用户交互(如 Ctrl+C 中断程序)。
  • 进程间通知(如子进程结束后通过 SIGCHLD 通知父进程)。

信号是 Unix 系统中最基础的异步通信机制,广泛用于处理突发事件和进程控制,但需注意其异步性带来的复杂性(如数据一致性问题)。

http://www.dtcms.com/a/433683.html

相关文章:

  • 我想做网站 怎么做呢营销号视频生成器网页版
  • 网站的备案可以管几年正品购物平台哪个最好
  • 网站设计过程柳江网站建设
  • 内网网站建设软件wordpress制作视频站
  • 如何将网站内容做chm搜索引擎优化的意思
  • TP5.1做的网站首页被挂马原因撸撸撸做最好的导航网站
  • 电脑做系统哪个网站比较好用域名到期与网站打不开
  • asp.net做网站教程资兴市住房和城乡建设局网站
  • 网站制作公司dedecms微信公众号入口
  • 网站建设具体流程图学做网站论坛视频下载
  • 网站验证wordpress导航页面模板下载地址
  • 自己做ppt网站wordpress个性首页
  • 建设银行官网首页网站公告西安网站搭建建设定制
  • 杭州网站排名wordpress 获取子类
  • 福州网站定制公司对网站开发流程的认识
  • 产品如何做网站推广网站建设有哪些方面
  • 做个企业网网站怎么做义马网站建设电话
  • 四川企业网站模板步骤网站建设项目经费的报告
  • king cms网站建设做网站优化时 链接名称"首页"有必要添加nofollow吗?
  • 网站建设功能模块价格发广告推广平台
  • 建设银行内部学习网站苏州建设工程协会网站
  • 网站免费模块建设现金分期网站
  • 那些网站是vue做的美食网站建设合同范例
  • 网站换友链平台万网网站后台管理
  • 泉州网站排名北京建设集团网站
  • 物流网站 源码建工信息网
  • 设计网站推荐素材网站厦门网站优化公司
  • 个人网站介绍模板下载官方网站建设步骤
  • 在线电影网站开发WordPress源码带会员中心系统
  • 东营seo网站推广企业网站建设 哪个公司做得好