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

做效果图挣钱网站百度竞价排名是什么意思

做效果图挣钱网站,百度竞价排名是什么意思,惠州做棋牌网站建设多少钱,国外mod大型网站目录 1. 缘起2. 背景知识3. 源码分析3.1 准备工作3.2 设置进程名字 1. 缘起 在运行nginx的时候,用ps查看nginx的进程信息,可能的输出如下: root 42169 3105 0 16:51 ? 00:00:00 nginx: master process ./objs/nginx root …

目录

  • 1. 缘起
  • 2. 背景知识
  • 3. 源码分析
    • 3.1 准备工作
    • 3.2 设置进程名字

1. 缘起

  在运行nginx的时候,用ps查看nginx的进程信息,可能的输出如下:

root      42169    3105  0 16:51 ?        00:00:00 nginx: master process ./objs/nginx
root      42170   42169  0 16:51 ?        00:00:00 nginx: worker process
root      42171   42169  0 16:51 ?        00:00:00 nginx: worker process

  显示的最后一列进程名字非常清晰,有master process, worker process,一目了然。可是如果我们自己写一个程序,运行起来的时候则完全不是那样,显示的就是运行这个程序的命令行,如果是一个多进程的程序,则不太好区分不同的进程到底是干什么用的。那么就来研究一下nginx到底是怎么做的吧。

2. 背景知识

  通过ps或者top看到的linux进程实际上就是操作系统给当前进程分配的命令行缓冲区中的内容,在c程序中就是 main(int argc, char *const *argv)函数的argv指向的地址。这是一个连续的地址,存放了命令行参数列表,而命令行参数后面则是环境变换缓冲区。如下图:
在这里插入图片描述

  可以看到,命令行和环境变量两个缓冲区是前后相邻的。我们需要通过修改命令行参数对应的缓冲区内容来修改进程名字信息,但是需要考虑的一个问题是,因为命令行参数和环境变量的缓存是前后相邻的,如果新修改的进程名字的信息比原先的长,就可能出现覆盖后面的环境变量的问题,导致程序故障。因此,我们需要在修改进程名的时候对环境变量部分另外再分配一段内存来存储,来避开这个问题。

  接下来看看nginx的实现代码,学会了nginx的处理逻辑,我们完全可以今后拿过来在自己的其他程序中来使用了。

3. 源码分析

  nginx的这部分源码只存在于os/unix/ngx_setproctitle.c中,由于windows系统是不能支持修改进程名的,所以在os/win32目录中没有类似的实现。它的实现很简单,分为两个函数,第一个函数用来做准备工作,给环境变量挪到一个新分配的位置;第二个函数才真正设置进程名。

3.1 准备工作

ngx_int_t
ngx_init_setproctitle(ngx_log_t *log)
{u_char      *p;size_t       size;ngx_uint_t   i;size = 0;/* 计算环境变量总共需要多少缓存空间 */for (i = 0; environ[i]; i++) {size += ngx_strlen(environ[i]) + 1;}/* 分配一个新的缓存空间来存放环境变量 */p = ngx_alloc(size, log);if (p == NULL) {return NGX_ERROR;}/* ngx_os_argv_last 表示命令行参数可以存储的内存上界 */ngx_os_argv_last = ngx_os_argv[0];/* 遍历整个命令行参数列表 */for (i = 0; ngx_os_argv[i]; i++) {if (ngx_os_argv_last == ngx_os_argv[i]) {ngx_os_argv_last = ngx_os_argv[i] + ngx_strlen(ngx_os_argv[i]) + 1;}}/* 以下将环境变量复制到新的缓冲区 */for (i = 0; environ[i]; i++) {if (ngx_os_argv_last == environ[i]) {size = ngx_strlen(environ[i]) + 1;ngx_os_argv_last = environ[i] + size;ngx_cpystrn(p, (u_char *) environ[i], size);environ[i] = (char *) p;p += size;}}ngx_os_argv_last--;return NGX_OK;
}

以上代码逻辑非常简单明了,就是给环境变量缓冲区挪了个位置。

3.2 设置进程名字

void
ngx_setproctitle(char *title)
{u_char     *p;#if (NGX_SOLARIS)ngx_int_t   i;size_t      size;#endif/* 将命令行参数的第1个元素设置为空,表示将进程名后面的命令行参数全部忽略掉 */ngx_os_argv[1] = NULL;/* 将命令行参数的第0个元素指向的地址设置为想要的进程名title,以下分为两次拷贝,第一次写入前缀nginx: 第二次才写入传入的参数title*/p = ngx_cpystrn((u_char *) ngx_os_argv[0], (u_char *) "nginx: ",ngx_os_argv_last - ngx_os_argv[0]);p = ngx_cpystrn(p, (u_char *) title, ngx_os_argv_last - (char *) p);/* solaris 部分的解析这里略过不看了 */
#if (NGX_SOLARIS)size = 0;for (i = 0; i < ngx_argc; i++) {size += ngx_strlen(ngx_argv[i]) + 1;}if (size > (size_t) ((char *) p - ngx_os_argv[0])) {/** ngx_setproctitle() is too rare operation so we use* the non-optimized copies*/p = ngx_cpystrn(p, (u_char *) " (", ngx_os_argv_last - (char *) p);for (i = 0; i < ngx_argc; i++) {p = ngx_cpystrn(p, (u_char *) ngx_argv[i],ngx_os_argv_last - (char *) p);p = ngx_cpystrn(p, (u_char *) " ", ngx_os_argv_last - (char *) p);}if (*(p - 1) == ' ') {*(p - 1) = ')';}}#endif/* 将命令行缓冲区后面多出来的空间填充空格,我感觉这行判断语句代码有点小毛病,如果p > ngx_os_argv_last呢,当然实际应该不太会发生这种情况*/if (ngx_os_argv_last - (char *) p) {ngx_memset(p, NGX_SETPROCTITLE_PAD, ngx_os_argv_last - (char *) p);}ngx_log_debug1(NGX_LOG_DEBUG_CORE, ngx_cycle->log, 0,"setproctitle: \"%s\"", ngx_os_argv[0]);
}

   好了,以上就是对如何设置进程名字的一个分析和学习的过程。

http://www.qdjiajiao.com/news/11068.html

相关文章:

  • 内网穿透做网站有品质的网站推广公司
  • 公司网站界面如何设计seo优化点击软件
  • 番禺网站设计与制作网络营销的定义
  • 休闲旅游产品营销网站的建设策略seo在线培训课程
  • 湖北优化网站建设搜索引擎优化公司
  • 做网站的详细教程合肥网络优化公司有几家
  • name域名的网站百度号码认证平台官网
  • 自学建站网2023年的新闻十条
  • 网站做等保备案百度seo优化哪家好
  • 北京网站开发网站建设价格网站推广该怎么做
  • 绑定网站网站建设高端公司
  • wordpress 响应式图片seo行业网
  • 网站建设中可能出现的问题seo服务商
  • 情公司做的网站重庆森林经典台词截图
  • 网站制作高手seo怎么学在哪里学
  • 公司网站备案网站名称有什么用有哪些推广平台和渠道
  • 怎么建立一个小说网站新站整站快速排名
  • 特色的岑溪网站开发军事最新消息
  • 织梦做的网站怎么添加关键词乔拓云网站注册
  • 推广做网站莱芜宣传方式
  • 站长之家是什么网站网站seo排名优化价格
  • 怎么找网站建设公司东莞seo外包
  • 高水平高职建设网站厦门seo收费
  • 注册一个空壳公司养着长沙网站seo公司
  • wordpress写的网站互联网营销师培训班
  • 网站建设与服务费是什么服务官网seo
  • 做网站常用的插件磁力吧ciliba
  • wordpress v4.9.5seo优化方案案例
  • 宁波营销型网站建设优化建站厦门谷歌推广
  • 免费成品网站那里好上海广告公司