摘录nginx 信号处理方法部分代码
编译及执行步骤:
- 1.接收进程编译 : g++ -g -o a.out signal.c
- 2.运行接收进程:./a.out
- 3.发送进程编译: g++ -o b.out signal.c
- 4.发送进程查询接收进程pid:ps -alx | grep a.out | awk ‘{print $3}’
- 5.发送进程发送信号:./b.out -s reload -p 36357(36357是第4部查询到的进程PID号)
说明:nginx把主进程号写入文件中,在本例中手动查询下,当参数传入b.out进程
代码块
#include<string.h>
#include<stdio.h>
#include<stdlib.h>
#include <signal.h>
#include <unistd.h>
#define ngx_memzero(buf, n) (void) memset(buf, 0, n) //ngx_memzero使用的是memset原型,memset使用汇编进行编写
void
ngx_signal_handler(int signo)
{
printf("ngx_signal_handler :%d\n", signo);
}
typedef struct {int signo; //信号的编号char *signame; //信号的字符串表现形式char *name; //信号名称void (*handler)(int signo); //信号处理函数
} ngx_signal_t;#define ngx_signal_helper(n) SIG##n
#define ngx_signal_value(n) ngx_signal_helper(n)#define ngx_random random/* TODO: #ifndef */
#define NGX_SHUTDOWN_SIGNAL QUIT
#define NGX_TERMINATE_SIGNAL TERM
#define NGX_NOACCEPT_SIGNAL WINCH
#define NGX_RECONFIGURE_SIGNAL HUP#if (NGX_LINUXTHREADS)
#define NGX_REOPEN_SIGNAL INFO
#define NGX_CHANGEBIN_SIGNAL XCPU
#else
#define NGX_REOPEN_SIGNAL USR1
#define NGX_CHANGEBIN_SIGNAL USR2
#endif#define ngx_value_helper(n) #n
#define ngx_value(n) ngx_value_helper(n)ngx_signal_t signals[] = {{ ngx_signal_value(NGX_RECONFIGURE_SIGNAL),"SIG" ngx_value(NGX_RECONFIGURE_SIGNAL),"reload",ngx_signal_handler},{ ngx_signal_value(NGX_REOPEN_SIGNAL),"SIG" ngx_value(NGX_REOPEN_SIGNAL),"reopen",},{ ngx_signal_value(NGX_NOACCEPT_SIGNAL),"SIG" ngx_value(NGX_NOACCEPT_SIGNAL),"",ngx_signal_handler },{ ngx_signal_value(NGX_TERMINATE_SIGNAL),"SIG" ngx_value(NGX_TERMINATE_SIGNAL),"stop",ngx_signal_handler },{ ngx_signal_value(NGX_SHUTDOWN_SIGNAL),"SIG" ngx_value(NGX_SHUTDOWN_SIGNAL),"quit",ngx_signal_handler},{ ngx_signal_value(NGX_CHANGEBIN_SIGNAL),"SIG" ngx_value(NGX_CHANGEBIN_SIGNAL),"",ngx_signal_handler},{ SIGALRM, "SIGALRM", "", ngx_signal_handler },{ SIGINT, "SIGINT", "", ngx_signal_handler },{ SIGIO, "SIGIO", "", ngx_signal_handler },{ SIGCHLD, "SIGCHLD", "", ngx_signal_handler },{ SIGSYS, "SIGSYS, SIG_IGN", "", SIG_IGN },{ SIGPIPE, "SIGPIPE, SIG_IGN", "", SIG_IGN },{ 0, NULL, "", NULL }
};int ngx_os_signal_process(char *name, int pid)
{ngx_signal_t *sig;for (sig = signals; sig->signo != 0; sig++) {if (strcmp(name, sig->name) == 0) {printf("send signame: %s\n", name);if (kill(pid, sig->signo) != -1) {return 0;}printf("ngx_os_signal_process");}}return 1;
}bool ngx_init_signals()
{ngx_signal_t *sig;struct sigaction sa;for (sig = signals; sig->signo != 0; sig++) {ngx_memzero(&sa, sizeof(struct sigaction));sa.sa_handler = sig->handler;sigemptyset(&sa.sa_mask);if (sigaction(sig->signo, &sa, NULL) == -1) {printf("sigaction(%s) failed", sig->signame);return false;}}return true;
}
unsigned int process;
static char *csignal;
int pid = 0;
int main(int argc, char *const *argv)
{u_char *p;int i;for (i = 1; i < argc; i++){p = (u_char*) argv[i];if(*p++ != '-'){printf("invalid option: - !\n");return -1;}while(*p){switch(*p++){case 's':case 'S':if(*p){csignal = (char*)p;printf("p csignal:%s\n", csignal);}else if(argv[++i]){csignal = argv[i];printf("argv csignal:%s\n", csignal);}else{printf("case s error!\n");return -1;}if(strcmp(csignal, "reload") == 0){printf("reload\n");continue;}else{printf("not reload\n");return -1;}break;case 'p':{pid = atoi(argv[++i]);}break;default:printf("default err!\n");return -1;}}}if(csignal){if(pid == 0){printf("pid : 0\n");return 0;}printf("pid: %d\n", pid);ngx_os_signal_process(csignal, pid);printf("run csignal!");return 0;}ngx_init_signals();while(1){printf("main\n");sleep(1);};
}
摘录nginx 信号处理方法部分代码相关推荐
- 基于小波变换的信号降噪处理及仿真研究_信号处理方法推荐--1(转载自用,侵删)...
综述 作者:aresmiki 链接:https://www.zhihu.com/question/23701194/answer/167005497 来源:知乎 著作权归作者所有.商业转载请联系作者获 ...
- php 判断是什么服务器,php判断服务器是apache还是nginx的方法
帮别人调网站时,有时候需要知道网站是用的apache服务还是nginx服务,虽然说可以通过网页的head头来查看,但今天还是想说一下用php来检测服务器是用的apahce服务或nginx服务的方法. ...
- 【故障诊断】基于粒子群和多元宇宙算法优化最大相关峭度解卷积(MCKD)实现信号处理附matlab代码
1 内容介绍 1.1研究背景及意义 制造业的发展支撑着国家经济的稳定快速发展,是人民生活幸福和国家局势 稳定的保障.发展制造业离不开科技创新.加强制造业创新.推动产业转型升级是 提升我国国际地位.实现 ...
- MATLAB不同时频信号处理方法介绍及效果对比
本文欢迎非商业目的的学习分享转载,转载请附上原文链接及作者ID 本文为作者自身的一个学习总结,大部分内容在相关教材上也可以找到,有空的也会不定期更新.本身也在学习的过程中,出现错误在所难免,欢迎大家在 ...
- C语言-人狼羊菜问题-最容易看懂的解决方法及代码
C语言-人狼羊菜问题-最容易看懂的解决方法及代码 参考文章: (1)C语言-人狼羊菜问题-最容易看懂的解决方法及代码 (2)https://www.cnblogs.com/zandbin/p/5341 ...
- docker下安装Nginx的方法
这篇文章主要介绍了docker下安装Nginx的方法,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下 一. 环境说明 docker: 18.03.1-ce nginx: 1.15.1 二. 拉 ...
- java异常在哪一层捕获_当在一个方法的代码中抛出一个检测异常时,该异常或被方法中的 ( )结构 捕获,或者在方法的 ( ) 中声明_学小易找答案...
[填空题]当异常已经被定义时,必须通过( ) 语句来处理它. [填空题]Catch 子句包含( )的程序段 [单选题]下列java语言的常用异常类中,属于检测异常的是() [单选题]自定义异常类时,可 ...
- 2021-04-09 随机模拟—蒙特卡洛方法 Matlab代码实现
随机模拟-蒙特卡洛方法 Matlab代码实现 蒙特卡洛方法 蒙特卡洛方法(Monte Carlo method),也称统计模拟方法,是二十世纪四十年代中期由于科学技术的发展和电子计算机的发明,而被提出 ...
- 数据挖掘之3种数据归一化方法及代码实现
学习数据挖掘.机器学习的同学们应该经常碰到数据归一化(也称标准化),数据的不同特征种类(评价指标)的取值范围差别可能很大,如果不做处理会影响数据分析的结果.因此需要把数据进行标准化处理,将数据进行比例 ...
最新文章
- 解决 Visual Studio 2017 RC 不兼容低版本 Visual Studio 创建的 MVC 4 项目的问题
- android 蓝牙链接电脑,如何使从台式电脑到Android设备的测试蓝牙连接
- c语言编写单片机技巧
- tab切换webuploader失效的解决方法
- google android ui,UI Automator
- mysql备份和还原
- SQL按字段分组取最大(小)值记录(重复记录)
- c语言编写面向对象的类
- PTES 测试执行标准
- MatConvNet训练自己的网络
- 正态分布西格玛越大_6西格玛中正太分布包含什么?
- 典藏推荐:《乱世佳人》(《飘》)
- 手机版本android升级包下载,ColorOS8.0升级包下载安装-oppo手机系统ColorOS8.0正式版升级包下载 安卓版 v1.0- 游娱下载站...
- 9820E ClassicHome分析总结
- Sitecore学习总结(1)
- C语言学习6:数据类型 -> 基本类型 -> 整型类型(int、short int、long int、char等)
- java4android网易云,Android仿网易云音乐播放界面
- 360网站卫士SQL注入绕过案例一个
- GB2312(部分GBK)汉字编码表
- MySQL高级篇(高阳)建表sql语句大全
热门文章
- 谷歌发布:2021年度最受欢迎的开源Chrome插件!
- 每日一皮:多线程理想与现实的差距
- 会写代码是你创业路上的包袱吗?
- java int 127_Integer类型中奇怪的127和128
- 分数等级_志愿填报丨填报公办普通高中志愿,分数成绩和等级成绩均需关注
- 【mycat】读写分离
- Error: unsupported compiler: 9.3.0
- 目标检测优化2021
- python 编译exe
- graphviz.backend.ExecutableNotFound: failed to execute ['dot', '-Tpdf', '-O', 'Digraph.gv']