Answers:
您需要安装gdb来转储正在运行的进程的内存区域。
# Set pid of nginx master process here
pid=8192
# generate gdb commands from the process's memory mappings using awk
cat /proc/$pid/maps | awk '$6 !~ "^/" {split ($1,addrs,"-"); print "dump memory mem_" addrs[1] " 0x" addrs[1] " 0x" addrs[2] ;}END{print "quit"}' > gdb-commands
# use gdb with the -x option to dump these memory regions to mem_* files
gdb -p $pid -x gdb-commands
# look for some (any) nginx.conf text
grep worker_connections mem_*
grep server_name mem_*
您应该得到类似“二进制文件mem_086cb000匹配项”的信息。在编辑器中打开此文件,搜索配置(例如“ worker_connections”指令),然后复制并粘贴。利润!
更新:此方法并不完全可靠。它基于以下假设:nginx进程将读取配置,并且以后不会覆盖/重用此内存区域。我猜,掌握nginx的最佳过程为我们提供了最佳机会。
理想的方法是ngx_conf_t
从nginx过程映像中查找结构。
在这里定义
http://trac.nginx.org/nginx/browser/nginx/trunk/src/core/ngx_conf_file.h#L166
我的C&gdb很烂,所以其他人可以提出解决方案。