gpt4 book ai didi

c - 那么nginx是如何改变进程标题的呢?

转载 作者:行者123 更新时间:2023-11-30 16:01:43 26 4
gpt4 key购买 nike

该函数实现了更改进程标题的API:

http://lxr.evanmiller.org/http/source/os/unix/ngx_setproctitle.c

59     for (i = 0; environ[i]; i++) {
60 if (ngx_os_argv_last == environ[i]) {
61
62 size = ngx_strlen(environ[i]) + 1;
63 ngx_os_argv_last = environ[i] + size;
64
65 ngx_cpystrn(p, (u_char *) environ[i], size);
66 environ[i] = (char *) p;
67 p += size;
68 }
69 }
70
71 ngx_os_argv_last--;
72
73 return NGX_OK;
74 }

我不明白的是,将环境变量复制到 ngx_alloc(size, log); 分配的 block 之后,该 block 如何与 argv[] 连接> 阻止?

我在那里看不到这样的逻辑。

有一行我不明白:

ngx_os_argv_last--;

它是做什么用的,这条线是将分配的 block 与argv[]连接起来的吗?

最佳答案

模块开头的注释似乎解释了很多,你读了吗?

http://lxr.evanmiller.org/http/source/os/unix/ngx_setproctitle.c#L14

看起来ngx_init_setproctitle()函数只是设置了用于设置进程标题的内存,并且没有对标题进行真正的更改。模块开头的注释指出,它需要设置内存来设置进程标题,因为 argv[0] 可能没有用于新标题的空间(这是更改标题需要设置的空间) .

ngx_os_argv_last 变量只是指向 argv[]environ[] 的连续 block 的末尾。稍后在 ngx_setproctitle() 的复制过程中使用它。最后一个 ngx_os_argv_last-- 可能是为了解释字符串末尾的 '\0'

ngx_init_setproctitle() 使用 ngx_alloc() 创建空间,然后将 environ[] 复制到新空间中。 ngx_setproctitle() 函数只是用新值 title 复制 ngx_os_argv[0]

关于c - 那么nginx是如何改变进程标题的呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6202070/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com