自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(44)
  • 资源 (1)
  • 收藏
  • 关注

原创 gdb调试nginx

1、启动gdb【root】gdb2、设置调试子进程(gdb) set follow-fork-mode child3、执行调试文件(gdb) file  test4、设置子进程断点(gdb) b  son_thread_fun5、 程序运行到断点处(gdb) r6、单步跟踪(gdb) n     用n单步跟踪,不进入函数调用(gdb) s    用s

2015-11-25 13:55:11 490

转载 TFO (tcp fast open) 简介

Nginx 刚刚发布了 1.5.8 版本,其中 listen 指令支持 fastopen 参数。网上找来一篇文章介绍这个TCP_FASTOPEN 参数。注意:TCP_FASTOPEN 只在 3.7.1 以及更新的 Linux 内核版本才支持。以下内容来自:http://www.pagefault.info/?p=282这个是google的几个人提交的一个rfc,

2015-11-20 11:27:19 1967

转载 nginx模块开发—HTTP初始化之listen

1、知识百科nginx作为一个高性能的HTTP服务器,网络的处理是其核心,了解网络的初始化有助于加深对nginx网络处理的了解。与网络有关的配置命令主要有两个:listen和sever_name。listen命令设置nginx监听地址,对于IP协议,这个地址就是address和port,对于UNIX域套接字协议,这个地址就是path,一条listen指令只能指定一个address或者por

2015-11-19 16:51:06 1589

转载 HTTP1.0协议详解

引言                                        HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展。目前在WWW中使用的是HTTP/1.0的第六版,HTTP/1.1的规范化工作正在进行之中,而且HTTP-NG(Next Generation of

2015-11-19 15:55:32 3864

原创 将nginx编译成静态库

库是一种软件组件技术,库里面封装了数据和函数。库的使用可以使程序模块化。Windows系统包括静态链接库(.lib文件)和动态链接库(.dll文件)。Linux通常把库文件存放在/usr/lib或/lib目录下。Linux库文件名由:前缀lib、库名和后缀3部分组成,其中动态链接库以.so最为后缀,静态链接库通常以.a作为后缀。在程序中使用使用静态库和动态库

2015-11-18 15:31:28 2870

转载 查看linux静态库*.a中的函数和文件内容

查看linux静态库*.a中的函数和文件,这对某些时候是非常有用的,比如我现在正在尝试替换掉appro的2a算法库,这就需要了解appro的2a结构windows下dumpbin /exports libxxx.alinux 下nm -g --defined-only libxxx.a下面是appro算法库中的文件1、Appro_2a

2015-11-18 14:46:13 30601

转载 makefile:2: *** 遗漏分隔符 。 停止

我们在编写完makefile,然后在终端中$make出现“makefile:2: *** 遗漏分隔符 。 停止。”问题,原因是在编写makefile文件时:all:     gcc -o helloworld helloworld.cfresh:     rm -rf Makefileclean:     rm -rf helloworld helloworld.o

2015-11-18 11:49:02 1143

原创 make: 警告:检测到时钟错误。您的创建可能是不完整的。

在make的时候出现如下的问题,不过不是什么大问题,这个不影响编译结果。分析原因可能是:服务器上的文件最后修改时间比当前时钟要晚解决办法:用touch 命令把源程序的时间戳改一下find . -type f -exec touch {} \;或者touch *一下再重新编译

2015-11-18 09:08:12 828

转载 linux上进程状态查询

linux上进程有5种状态: 1. 运行(正在运行或在运行队列中等待) 2. 中断(休眠中, 受阻, 在等待某个条件的形成或接受到信号) 3. 不可中断(收到信号不唤醒和不可运行, 进程必须等待直到有中断发生) 4. 僵死(进程已终止, 但进程描述符存在, 直到父进程调用wait4()系统调用后释放) 5. 停止(进程收到SIGSTOP, SIGSTP, SIGTIN, SIG

2015-11-17 15:14:08 454

转载 EPOLL 事件之 EPOLLRDHUP

在对系统问题进行排查时,我发现了一个奇怪的现象:明明是对方断开请求,系统却报告一个查询失败的错误,但从用户角度来看请求的结果正常返回,没有任何问题。对这个现象深入分析后发现,这是一个基于 epoll 的连接池实现上的问题,或者说是特性 :)首先解释一下导致这个现象的原因。在使用 epoll 时,对端正常断开连接(调用 close()),在服务器端会触发一个 epoll 事件

2015-11-17 09:18:09 12832

转载 nginx-0.1.0文件分析1:ngx_daemon.c

文件:ngx_daemon.c函数:1)ngx_daemon解析:1)ngx_daemon函数解析思路如下:这个函数是为了将当前进程变为后台进程。一切尽在源码中。首先通过fork产生子进程,我们知道对于这个函数父进程的fork返回的是子进程的进程ID,子进程返回的是0我们假设父进程返回的是600,子进程返回0则

2015-11-16 16:45:14 700

转载 linux c 信号量编程

信号量当我们在多用户系统,多进程系统,或是两者混合的系统中使用线程操作编写程序时,我们经常会发现我们有段临界代码,在此处我们需要保证一个进程(或是一个线程的执行)需要排他的访问一个资源。信号量有一个复杂的编程接口。幸运的是,我们可以很容易的为自己提供一个对于大多数的信号量编程问题足够高效的简化接口。为了阻止多个程序同时访问一个共享资源所引起的问题,我们需要一种方法生成并且使用一个标

2015-11-16 14:22:30 532

转载 linux进程后台运行的几种方法 - nohup/setsid/&

我们经常会碰到这样的问题,用 telnet/ssh 登录了远程的 Linux 服务器,运行了一些耗时较长的任务, 结果却由于网络的不稳定导致任务中途失败。如何让命令提交后不受本地关闭终端窗口/网络断开连接的干扰呢?下面举了一些例子, 您可以针对不同的场景选择不同的方式来处理这个问题。nohup/setsid/&场景:如果只是临时有一个命令需要长时间运行,什么方法能最简便的保

2015-11-16 11:05:09 479

转载 Linux 下控制蜂鸣器发声的程序

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525

2015-11-16 10:53:11 10347

转载 Linux进程间通信——使用信号量

这篇文章将讲述别一种进程间通信的机制——信号量。注意请不要把它与之前所说的信号混淆起来,信号与信号量是不同的两种事物。一、什么是信号量为了防止出现因多个程序同时访问一个共享资源而引发的一系列问题,我们需要一种方法,它可以通过生成并使用令牌来授权,在任一时刻只能有一个执行线程访问代码的临界区域。临界区域是指执行数据更新的代码需要独占式地执行。而信号量就可以提供这样的一种访

2015-11-16 10:20:07 463

转载 关于nginx的启动权限

刚碰到的一个问题,在启动nginx时碰到这个错误:  nginx: [warn] the "user" directive makes sense only if the master process runs with super-user privileges, ignored in /usr/local/nginx/conf/nginx.conf: 显

2015-11-13 11:05:12 30240

转载 linux:SUID、SGID详解

如果你对SUID、SGID仍有迷惑可以好好参考一下!由于用户在UNIX下经常会遇到SUID、SGID的概念,而且SUID和SGID涉及到系统安全,所以用户也比较关心这个问题。关于SUID、SGID的问题也经常有人提问,但回答的人一般答得不够详细,加上曾经回答过两个网友的问题,还查了一些资料,决定整理成本文,以供大家参考。限于本人的水平问题,文章中如果有不当之处,请广大网友指正。

2015-11-13 10:45:05 547

转载 用 eventfd 在线程之间通信

最近有想法把网络库推广成能在线程,同主机进程和不同主机之间的通信的公共中间件。后面两样都可以用 socket。 当然同主机进程也可以用别的,先不想那么多。我要说的线程之间,要实现和 socket 统一的 reactor 通信机制,比较好的是用 Linux 的 eventfd 。eventfd 是一个相对比较新的东西,资料不多,所以我也是摸着石头过河。基本做法就是用 eventfd_crea

2015-11-11 14:51:49 693

转载 Nginx 源码完全剖析 nginx 自旋锁 ngx_spinlock

Nginx 是多进程模式的,一个 master 与多个 workers,一般工作在多核 CPU 上,所以自旋锁就是必须用到的。Nginx 中的自旋锁的定义,位于 ngx_spinlock.c 中,如下:voidngx_spinlock(ngx_atomic_t *lock, ngx_atomic_int_t value, ngx_uint_t spin){#if (NGX_HAVE_A

2015-11-11 14:15:39 601

转载 linux信号汇总大全

1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR111) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15

2015-11-11 13:32:49 580

转载 条件变量pthread_cond_t怎么用

最近看《UNIX环境高级编程》多线程同步,看到他举例说条件变量pthread_cond_t怎么用,愣是没有看懂,只好在网上找了份代码,跑了跑,才弄明白[cpp] view plaincopy#include #include #include pthread_mutex_t mutex = PTHREAD_MUTEX_IN

2015-11-11 10:44:56 558

转载 Nginx多线程原理

一、问题一般情况下,nginx 是一个事件处理器,一个从内核获取连接事件并告诉系统如何处理的控制器。实际上,在操作系统做读写数据调度的时候,nginx是协同系统工作的,所以nginx能越快响应越好。 nginx处理的事件可以是 超时通知、socket可读写的通知 或 错误通知。nginx 接收到这些消息后,会逐一进行处理。但是所有处理过程都是在一个简单的线程循环中完成的

2015-11-11 09:12:01 9189

转载 Nginx平滑升级的详细操作方法

一、平滑升级概述Nginx方便地帮助我们实现了平滑升级。其原理简单概括,就是:(1)在不停掉老进程的情况下,启动新进程。(2)老进程负责处理仍然没有处理完的请求,但不再接受处理请求。(3)新进程接受新请求。(4)老进程处理完所有请求,关闭所有连接后,停止。这样就很方便地实现了平滑升级。一般有两种情况下需要升级Nginx,一种是确实要升级Nginx的版本,另一种是要为Ngin

2015-11-06 16:07:00 692

转载 nginx多进程模型之热代码平滑升级

平滑升级的主要过程包括一下步骤: 1. 新代码make执行完后,这里不用在make install 了,接下来重名/sbin/nginx为nginx.old# mv /usr/local/nginx/sbin/nginx/usr/local/nginx/sbin/nginx.old 2. 复制编译后objs目录下的nginx文件到nginx的安装目录sbin

2015-11-06 15:37:20 532

转载 linux c setitimer用法说明

在linux c编程中,setitimer是一个比较常用的函数,可用来实现延时和定时的功能,网上有各种零零散散的用法说明,都只提到了个别用法,今天抽空实践整理了一份比较详细的:使用时需要引入的头文件:[cpp] view plaincopy#include   setitimer函数原型:[

2015-11-06 14:42:29 419

原创 函数waitpid和WTERMSIG说明

waitpid系统调用在Linux函数库中的原型是:#include  #include  pid_t waitpid(pid_t pid,int *status,int options)从本质上讲,系统调用waitpid和wait的作用是完全相同的,但waitpid多出了两个可由用户控制的参数pid和options,从而为我们编程提供了另一种更灵

2015-11-06 12:02:19 4218

原创 linux信号处理函数

linux中信号的处理一般分为四步1、信号集的安装和登记2、信号集操作3、信号的发送4、信号的接收 下面分阶段详细说明1、信号集的安装和登记使用sigaction函数对信号进行安装和登记ngx_init_signals(ngx_log_t *log){    ngx_signal_t      *sig;    struct sigaction

2015-11-06 10:52:27 634

原创 标题:用kill函数传递信号 int kill(pid_t pid,int sig)

int kill(pid_t pid,int sig)函数功能:传送信号给指定的进程相关函数 raise,signal表头文件 #include#include函数定义 int kill(pid_t pid,int sig);函数说明:kill()可以用来送参数sig指定的信号给参数pid指定的进程。参数pid有几种情况:pid>0  

2015-11-06 08:57:34 4092

转载 【Linux学习】epoll详解

什么是epollepoll是什么?按照man手册的说法:是为处理大批量句柄而作了改进的poll。当然,这不是2.6内核才有的,它是在2.5.44内核中被引进的(epoll(4) is a new API introduced in Linux kernel 2.5.44),它几乎具备了之前所说的一切优点,被公认为Linux2.6下性能最好的多路I/O就绪通知方法。 epol

2015-11-04 12:00:51 324

转载 ngx_worker_process_cycle子进程执行

这一节主要学习子进程处理函数ngx_worker_process_cycle[cpp] view plaincopyprint?src/os/unix/ngx_process_cycle.c    static void  ngx_worker_process_cycle(ngx_cycle_t *cycle, void *data)  

2015-11-04 10:50:49 610

转载 ngx_master_process_cycle解读

nginx的进程启动过程是在ngx_master_process_cycle(src/os/unix/ngx_process_cycle.c)中完成的(单进程是通过ngx_single_process_cycle完成,这里只分析多进程的情况),在ngx_master_process_cycle中,会根据配置文件的worker_processes值创建多个子进程,即一个master进程和多个work

2015-11-03 16:13:26 1063

转载 Nginx学习之六-nginx核心进程模型

一、Nginx整体架构正常执行中的nginx会有多个进程,最基本的有master process(监控进程,也叫做主进程)和woker process(工作进程),还可能有cache相关进程。一个较为完整的整体框架结构如图所示:二、核心进程模型启动nginx的主进程将充当监控进程,而由主进程fork()出来的子进程则充当工作进程。ng

2015-11-03 16:07:21 501

原创 nginx如何利用ngx_channel_t在进程间传递消息

多进程你可能很熟悉,也许有一套自己的使用习惯和方法。这东西没有什么权威建议,书上只是给出了基本知识点,至于具体怎么去用,因人而异。nginx在多进程设计方面有很多值得学习和借鉴的东西,我认为是一套比较好的实现方案。你也许认为这东西很简单,是老生常谈的东西了,但是我这里要提醒你一下,俗话道酒是陈的香,越经典的东西越值得去琢磨,不要对自己太自信。善于思考的家伙总是会在一些老的技术上给你许多新鲜的见解,

2015-11-03 15:06:58 538

转载 Linux系统编程之fcntl使用

能描述:根据文件描述词来操作文件的特性。#include #include  int fcntl(int fd, int cmd); int fcntl(int fd, int cmd, long arg); int fcntl(int fd, int cmd, struct flock *lock);[描述]fcntl()针对(文件)描述符提供控制。参数fd是

2015-11-03 14:17:16 280

转载 socketpair理解

先说说我的理解:socketpair创建了一对无名的套接字描述符(只能在AF_UNIX域中使用),描述符存储于一个二元数组,eg. s[2] .这对套接字可以进行双工通信,每一个描述符既可以读也可以写。这个在同一个进程中也可以进行通信,向s[0]中写入,就可以从s[1]中读取(只能从s[1]中读取),也可以在s[1]中写入,然后从s[0]中读取;但是,若没有在0端写入,而从1端读取,则1端的读取操

2015-11-03 14:01:30 286

转载 Nginx学习——Nginx进程间的通信

nginx进程间的通信进程间消息传递共享内存共享内存还是Linux下提供的最基本的进程间通信方式,它通过mmap和shmget系统调用在内存中创建了一块连续的线性地址空间,而通过munmap或者shmdt系统调用可以释放这块内存。使用共享内存的好处是当多个进程使用同一块共享内存时,在任何一个进程修改了共享内存中的内容后,其他进程通过访问这段共享内存都能够得到修改后的内容。N

2015-11-03 11:49:08 359

转载 nginx的进程模型

1 进程间的通信方式    使用 UNIX域套接字 socketpair() 异步通讯机制: nginx在创建worker前将先调用 socketpair(int channel[2]) 然后将 channel[0-1]设置为异步通知方式,并注册evnet事件,父进程使用channel[0],子进程使用channel[1]实现双方的通讯.1.1 创建子进程时用到的标示

2015-11-03 11:37:47 422

转载 Linux进程间通信——信号集函数

我们已经知道,我们可以通过信号来终止进程,也可以通过信号来在进程间进行通信,程序也可以通过指定信号的关联处理函数来改变信号的默认处理方式,也可以屏蔽某些信号,使其不能传递给进程。那么我们应该如何设定我们需要处理的信号,我们不需要处理哪些信号等问题呢?信号集函数就是帮助我们解决这些问题的。下面是信号函数集:1、int sigemptyset(sigset_t *set);

2015-11-03 11:10:56 320

转载 linux 信号处理函数集合

alarm(设置信号传送闹钟)相关函数signal,sleep表头文件#include定义函数unsigned int alarm(unsigned int seconds);函数说明alarm()用来设置信号SIGALRM在经过参数seconds指定的秒数后传送给目前的进程。如果参数sec

2015-11-03 10:52:39 478

转载 nginx源码剖析 从main函数看nginx启动流程

俗话说的好,牵牛要牵牛鼻子 驾车顶牛,处理复杂的东西,只要抓住重点,才能理清脉络,不至于深陷其中,不能自拔。对复杂的nginx而言,main函数就是“牛之鼻”,只要能理清main函数,就一定能理解其中的奥秘,下面我们就一起来研究一下nginx的main函数。1.nginx的main函数解读nginx启动显然是由main函数驱动的,main函数在在core/nginx.c文件

2015-11-03 10:16:42 2559

690561nsnkzT/IOT_0601—2019电梯物联网系列标准-电梯无纸化维护保养数据格式和交换 2019 68页.pdf

本标准适用于曳引与强制驱动电梯、液压驱动电梯、杂物电梯、自动扶梯与自动人行道,其他品种电梯可参照本标准执行。

2020-04-28

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除