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

内部网站如何做计算机毕设网站建设怎么改

内部网站如何做,计算机毕设网站建设怎么改,ps 怎么做网站搜索框,网站网警备案流程unix 的信号signal常用于进程管理.比如管理员或者操作系统通过向master进程实现重启和关闭服务#xff0e;master进程通过向worker进程发信号管理worker进程#xff0e;通常会在进程自定义信号处理函数,处理相关的逻辑.自定义信号处理函数,从使用者的角度看,很简单,有点像快捷…unix 的信号signal常用于进程管理.比如管理员或者操作系统通过向master进程实现重启和关闭服务master进程通过向worker进程发信号管理worker进程通常会在进程自定义信号处理函数,处理相关的逻辑.自定义信号处理函数,从使用者的角度看,很简单,有点像快捷键的定制.FPM 信号处理有以下几个特点:master进程,不是直接处理信号,而是通过socketpair创建一个管道,把信号转换一个字符,写到管道里,master进程事件处理无限循环,读取到这个字符时,调用对应的函数.socketpair,通常管道不同进程通信,而这里确是在同一个进程内部通信,左手交右手,感觉多此一举.这样做的好处是: 避免信号处理函数与事件处理逻辑同时运行的情况.注意worker 进程没有用到这个socketpair管道.worker 进程的信号处理常见的方式,直接绑定处理函数.处理过程: sig_soft_quit - fpm_php_soft_quit - fcgi_set_in_shutdownfcgi_set_in_shutdown 函数很简单 就是设置in_shutdown这个全局的worker进程开关worker进程无限循环时,每次都会检查这个开关, in_shutdown1 时,跳出循环,优雅退出.源码注释说明://fpm_signals.c#include fpm_config.h...//整数数组,存放socketpair创建的管道两端文件句柄static int sp[2];...//worker进程信号处理函数static void sig_soft_quit(int signo) /* {{{ */{int saved_errno errno;/* closing fastcgi listening socket will force fcgi_accept() exit immediately */close(0);if (0 socket(AF_UNIX, SOCK_STREAM, 0)) {zlog(ZLOG_WARNING, failed to create a new socket);}fpm_php_soft_quit();errno saved_errno;}//master进程信号处理函数static void sig_handler(int signo) /* {{{ */{//C99 的数组初始化语法//信号整数和字符的对应关系.static const char sig_chars[NSIG 1] {[SIGTERM] T,[SIGINT] I,[SIGUSR1] 1,[SIGUSR2] 2,[SIGQUIT] Q,[SIGCHLD] C};char s;int saved_errno;if (fpm_globals.parent_pid ! getpid()) {return;}saved_errno errno;s sig_chars[signo];//信号对应的字符写到管道write(sp[1], s, sizeof(s));errno saved_errno;}int fpm_signals_init_main() /* {{{ */{struct sigaction act;//创建socketpair管道,管道两端的文件句柄fd 放在数组sp里if (0 socketpair(AF_UNIX, SOCK_STREAM, 0, sp)) {zlog(ZLOG_SYSERROR, failed to init signals: socketpair());return -1;}if (0 fd_set_blocked(sp[0], 0) || 0 fd_set_blocked(sp[1], 0)) {zlog(ZLOG_SYSERROR, failed to init signals: fd_set_blocked());return -1;}if (0 fcntl(sp[0], F_SETFD, FD_CLOEXEC) || 0 fcntl(sp[1], F_SETFD, FD_CLOEXEC)) {zlog(ZLOG_SYSERROR, falied to init signals: fcntl(F_SETFD, FD_CLOEXEC));return -1;}memset(act, 0, sizeof(act));act.sa_handler sig_handler; //所有信号使用同一个处理函数sigfillset(act.sa_mask);if (0 sigaction(SIGTERM, act, 0) ||0 sigaction(SIGINT, act, 0) ||0 sigaction(SIGUSR1, act, 0) ||0 sigaction(SIGUSR2, act, 0) ||0 sigaction(SIGCHLD, act, 0) ||0 sigaction(SIGQUIT, act, 0)) {zlog(ZLOG_SYSERROR, failed to init signals: sigaction());return -1;}return 0;}int fpm_signals_init_child(){struct sigaction act, act_dfl;memset(act, 0, sizeof(act));memset(act_dfl, 0, sizeof(act_dfl));act.sa_handler sig_soft_quit;act.sa_flags | SA_RESTART;act_dfl.sa_handler SIG_DFL; //系统默认动作//worker 进程不使用socketpair创建的管道close(sp[0]);close(sp[1]);if (0 sigaction(SIGTERM, act_dfl, 0) ||0 sigaction(SIGINT, act_dfl, 0) ||0 sigaction(SIGUSR1, act_dfl, 0) ||0 sigaction(SIGUSR2, act_dfl, 0) ||0 sigaction(SIGCHLD, act_dfl, 0) ||0 sigaction(SIGQUIT, act, 0)) {zlog(ZLOG_SYSERROR, failed to init child signals: sigaction());return -1;}return 0;}int fpm_signals_get_fd(){return sp[0];}master 进程的信号被写到了管道,管道另一端的处理://fpm_events.cstatic void fpm_got_signal(struct fpm_event_s *ev, short which, void *arg){char c;int res, ret;int fd ev-fd;do {do {res read(fd, c, 1);} while (res -1 errno EINTR);if (res 0) {if (res 0 errno ! EAGAIN errno ! EWOULDBLOCK) {zlog(ZLOG_SYSERROR, unable to read from the signal pipe);}return;}//依据读取到的字符做处理switch (c) {...case Q : /* SIGQUIT */zlog(ZLOG_DEBUG, received SIGQUIT);zlog(ZLOG_NOTICE, Finishing ...);fpm_pctl(FPM_PCTL_STATE_FINISHING, FPM_PCTL_ACTION_SET);break;case 1 : /* SIGUSR1 */zlog(ZLOG_DEBUG, received SIGUSR1);if (0 fpm_stdio_open_error_log(1)) {zlog(ZLOG_NOTICE, error log file re-opened);} else {zlog(ZLOG_ERROR, unable to re-opened error log file);}ret fpm_log_open(1);if (ret 0) {zlog(ZLOG_NOTICE, access log file re-opened);} else if (ret -1) {zlog(ZLOG_ERROR, unable to re-opened access log file);}/* else no access log are set */break;case 2 : /* SIGUSR2 */zlog(ZLOG_DEBUG, received SIGUSR2);zlog(ZLOG_NOTICE, Reloading in progress ...);fpm_pctl(FPM_PCTL_STATE_RELOADING, FPM_PCTL_ACTION_SET);break;}if (fpm_globals.is_child) {break;}} while (1);return;}
http://www.yutouwan.com/news/89221/

相关文章:

  • 网站建设收费标准不一超级浏览器
  • 手机网站开发用什么手机设计软件有哪些软件
  • 做本地的分类信息网站做网站_你的出路在哪里
  • 闸北集团网站建设沈阳有做网站的吗
  • 创科手机网站建设厅教育培训网站
  • 织梦网站栏目是做什么用的福州建网站,做网页
  • 镜像网站是如何做的c在线编程网站
  • 站长之家产品介绍微信公众平台入口
  • 移动网站建设哪家便宜购物网站名称
  • 德阳网站建设熊掌号wordpress清除主题信息
  • 博物馆 网站 建设专业网页制作服务商
  • 大人和小孩做系列网站网站建设销售客户疑问
  • 南海网站设计儿童手工制作
  • 优化网站 优帮云wordpress excel搜索功能
  • 宁波专业的网站搭建公司做网站建设工资高吗
  • 门户类网站备案付费设计网站
  • 各种网站的区别近期新闻热点事件摘抄
  • 深圳生产型企业网站建设专业注册一家公司需要多少钱
  • 帝国cms 网站地图标签制作app连接网站
  • 襄阳定制型网站开发网站后台开发费用
  • 做自己网站做站长哈尔滨网站开发建设公司
  • 响应式网站案列网站死链接怎么提交
  • 杭州哪家做外贸网站网站换域名做301会有影响
  • 爱网站搭建wordpress 网站白屏
  • 做网站怎么调整图片间距邢台市桥西住房建设局网站
  • 怎么区别做pc端和手机端网站中国机械加工网18易5下2拉i
  • 高清设计网站推荐高端网站建设套餐
  • 做网站开票是多少个点的票药学专业网站
  • 给别人做网站会连累自己吗镇江网站制作价格
  • 品牌推广的渠道有哪些龙岗优化网站建设