读取apache的共享内存

C++多进程编程实战:从fork到共享内存的完整解决方案 并发编程是构建高性能系统的核心技术,其核心原理在于通过并行执行任务来提升计算效率与资源利用率。在C++开发中,多进程技术因其强大的隔离性和稳定性,成为后台服务、游戏服务器和高性能计算等场景的关键实现手段。通过进程间通信(IPC)机制,如管道和共享内存,开发者可以在保证数据一致性的同时,实现进程间的高效协作。本文聚焦于C++多进程编程的工程实践,详细解析了fork、wait等系统调用的使用,并深入探讨了如何利用共享内存和信号量构建健壮的主从(Master-Worker)进程模型,为开发高可靠、可扩展的分布式计 阅读详情

1.想要从外部程序读取apache的共享内存,首先要了解apache使用的共享内存机制,以下是在一段测试apache使用的共享内存机制的小程序:

#include <stdio.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include "httpd.h"
#include "http_config.h"
#include </usr/include/httpd/scoreboard.h>

int main(void)
{
 if(APR_USE_SHMEM_SHMGET_ANON==1)
 {
  printf("use APR_USE_SHMEM_SHMGET_ANON!/n");
}
if(APR_USE_SHMEM_MMAP_TMP==1)
 {
  printf("use APR_USE_SHMEM_MMAP_TMP!/n");
}
if(APR_USE_SHMEM_MMAP_SHM==1)
 {
  printf("use APR_USE_SHMEM_MMAP_SHM!/n");
}
if(APR_USE_SHMEM_MMAP_ZERO==1)
 {
  printf("use APR_USE_SHMEM_MMAP_ZERO!/n");
}
if(APR_USE_SHMEM_SHMGET==1)
 {
  printf("use APR_USE_SHMEM_SHMGET!/n");
}
if(APR_USE_SHMEM_MMAP_ANON==1)
 {
  printf("use APR_USE_SHMEM_MMAP_ANON!/n");
}
exit(0);
}

我的系统使用的是APR_USE_SHMEM_MMAP_ANONAPR_USE_SHMEM_SHMGET。其中APR_USE_SHMEM_SHMGET是命名共享内存机制,即当配置文件中有ScoreboardFile配置时使用的。而APR_USE_SHMEM_MMAP_ANON顾名思义是匿名共享内存机制。

知道了使用的共享机制类型后再阅读apr_shm_create代码,知道共享内存的数据结构及存放顺序后,就可以读取apache的共享内存了。下面要介绍的是使用命名共享内存时的读取方法。

2.如果你使用的命名共享内存机制是APR_USE_SHMEM_SHMGET,那么敲入ipcs后你可以得到apache的shmid.通过shmat它就可以读取apache的共享内存了。以下是实现程序:

#include <stdio.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include "httpd.h"
#include "http_config.h"
#include </usr/include/httpd/scoreboard.h>

int main()
{
 char* m;
 int i;
 int j;
 int myuid;
 struct shmid_ds shm_buf;
 global_score global;
 process_score* parent;
 
 myuid=getuid( );
 printf("myuid=%d/n",myuid);

 shmctl(196609,IPC_STAT,&shm_buf);
 
 printf("shmperm.uid=%d/n",shm_buf.shm_perm.uid);
 printf("shmperm.gid=%d/n",shm_buf.shm_perm.gid);
 printf("size=%d/n",shm_buf.shm_segsz);

if(shm_buf.shm_perm.uid==myuid)
{
 printf("permission ok!/n");
}
m=shmat(196609,NULL,0);
 if(m==-1)
{
perror("shmat error");
exit(1);
}

printf("sizeof(global_score)=%d/n",sizeof(global_score));
printf("sizeof(process_score)=%d/n",sizeof(process_score));
printf("sizeof(worker_score)=%d/n",sizeof(worker_score));
printf("sizeof(scoreboard)=%d/n",sizeof(scoreboard));
printf("sizeof(apr_size_t)=%d/n",sizeof(apr_size_t));
printf("sizeof(int)=%d/n",sizeof(int));
printf("sizeof(unsigned char)=%d/n",sizeof(unsigned char));


global=*(global_score*)m;
printf("server_limit=%d/n",global.server_limit);
printf("thread_limit=%d/n",global.thread_limit);

m+=sizeof(global_score);
parent=(process_score*)m;
m+=sizeof(process_score)*global.server_limit;

worker_score worker[global.server_limit][global.thread_limit];
for(i=0;i<global.server_limit;i++)
{
  worker[i][0]=*(worker_score*)m;
  m+=sizeof(worker_score);
 
}

for(i=0;i<global.server_limit;i++)
{
 if(worker[i][0].status!=SERVER_DEAD)
 printf("parent[%d].pid=%d/n",i,parent[i].pid);
}
shmctl(196609,IPC_RMID,0);
exit(0);

}

第一次发文请各位高手多多指教!!!

osgearth2.10 demo功能介绍 osgearth-2.10 demo: 说明: 1、运行环境win7 x64 旗舰版,CPU i5-6400 8核,8G内存; 2、括号内是对应demo的测试参数(.earth); 3、配置OSG_FILE_PATH; 4、参数命令行可以查看各个demo需要的输入参数; 5、前缀说明:gui界面程序、cmd控制台程序、non功能未知; 6、程序后括号里的non表示不需要通过命令行输入参数; 示例: 1、gui:osgearth_3pv(simple.earth):相机与地球的投影关系,Range表示相机 阅读详情

相关推荐

肖特基二极管选型参数,结构原理,工艺与注意问题总结

肖特基二极管(Schottky Diode)是一种特殊的二极管,也被称为肖特基势垒二极管。它是利用金属与半导体接触形成的金属-半导体结原理制成的。与传统的PN结二极管相比,肖特基二极管具有更低的正向压降、更高的开关速度、更高的反向恢复时间以及更好的温度稳定性等特点。本文对肖特基二极管的工作原理,结构特点,工艺流程,选型参数及设计注意事项进行总结。

fydar的博客 759

Apache 获取真实ip的配置的实现方法

主要介绍了Apache 获取真实ip的配置的实现方法的相关资料,希望通过本文能帮助到大家,让大家实现这样的功能,需要的朋友可以参考下

基于心率与脉搏波传输时间的血压预测(毕业项目).zip

1.版本:matlab2014a/2019b/2024b2.附赠案例数据可直接运行。3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

APR分析-共享内存

APR分析-共享内存共享内存是一种重要的IPC方式。在项目中多次用到共享内存,只是用而并未深入研究。这次趁研究APR代码的机会复习了共享内存的相关资料。 APR共享内存封装的源代码的位置在$(APR_HOME)/shmem目录下,本篇blog着重分析unix子目录下的shm.c文件内容,其相应头文件为$(APR_HOME)/include/apr_shm.h。 一、共享内存简单小结 共享内存是最快的IPC方式,因为一旦这样的共享内存段映射到各个进程的地址空间,这些进程间通过共享内存的数据传递就不

zhangge3663的博客 713

参考资料学习APR库

APR分析-整体篇    一、何为APR?         Apache Server经过这么多年的发展后,将一些通用的运行时接口封装起来供给大家,这就是Apache Portable Run-time libraries,APR。    二、APR的目录组织          1)所有的头文件都放在$(APR)/include目录中;          2)所有功能接口的实现都放在各自的独立目录...

zhangge3663的博客 1878

<有用>解决Apache长时间占用内存大的问题,Apache 内存优化方法-以及查看线程进程命令

问:为什么服务器在连续运行多天后或访问峰值后,进程中的一个Apache.exe占用内存几百兆不减少? 答:用记事本打开apache2\conf\httpd.conf, 我在centos5上装了kloxo,找了半天 httpd.conf在 /etc/httpd/conf/目录下。 查找MaxRequestsPerChild,将MaxRequestsPerChild 0改成MaxRequests

houzhyan-博客 4733

APR介绍

APR分析-整体篇由于部门所使用的底层库与Apache Server有着“一定的渊源”,所以总有一种想看看Apache的实现的冲动。最近项目收尾,愿望终可实现。一、何为APR?Apache Server经过这么多年的发展后,将一些通用的运行时接口封装起来提供给大家,这就是Apache Portable Run-time libraries, APR。二、APR的目录组织从www

zhuky的专栏 1万+

varnishncsa中文man page

Author: Dag-Erling Smørgrav Date: 2010-05-31 Version: 1.0 Manual section: 1 Display varnish logs in apache/NCSA combined log format SYNOPSIS ...

weixin_34067049的博客 129

10分钟上手Apache Arrow:从安装到数据读取全攻略

你是否还在为大数据处理中的数据格式转换效率低下而烦恼?是否在寻找一种能加速数据交换和内存处理的解决方案?本文将带你快速掌握Apache Arrow(阿帕奇箭头)的核心功能,从安装到实际数据读取与处理,让你在10分钟内完成从入门到实战的跨越。读完本文,你将能够:安装Apache Arrow的Python库、理解Arrow的核心优势、使用Arrow读取和处理数据、掌握基本的Arrow数据操作。 Ap...

gitblog_00547的博客 1369

ROS2-DDS及共享内存应用

本文先是简单介绍ROS2的通讯层DDS,进而介绍如何基于Fast-DDS实现共享内存通讯。

qq_20604231的博客 5560

delphi cxgrid读取本地image_Apache Httpd本地提权漏洞分析(CVE-2019-0211)

一、概述近日,Apache爆出存在本地权限提升漏洞,该漏洞影响2.4.17(2015年10月9日发布)至2.4.38版本(2019年4月1日),其原因在于越界数组访问导致的任意函数调用,使得Apache HTTP将受到本地root权限提升。在Apache正常重新启动时,将会触发这一漏洞(apache2ctl graceful)。在标准Linux配置中,logrotate实用程序每天上午6:25会运...

weixin_39996742的博客 212

parquet-wasm:WebAssembly 读取与写入 Apache Parquet 格式

`parquet-wasm` 是一个基于 WebAssembly 的项目,提供了对 Apache Parquet 文件格式的读取和写入功能。它使用 Rust 语言编写的 `parquet` 和 `arrow` crates 来实现这一功能,并与 JavaScript Arrow 实现配合使用。这种设计使得 `parquet-wasm` 能够在浏览器和 Node.js 环境中高效地处理大型数据集,尤

gitblog_01128的博客 1008

Windows 操作系统中,“共享内存计算” 不能直接实现,因为内存资源是每个系统独立管理的物理资源。不过可以通过以下三种高级方案实现类似“共享内存“的分布式计算效果

Windows 操作系统中,“共享内存计算” 不能直接实现,因为内存资源是每个系统独立管理的物理资源。不过可以通过以下三种高级方案实现类似"共享内存"的分布式计算效果

欢迎光临~知1而N的博客 815

Fast Python Serialization with Ray and Apache Arrow

这篇文章详细阐述了Ray和Apache Arrow之间的集成。解决的主要问题是数据序列化。 查阅Wikipedia,序列化指: 将数据结构或对象状态转换为可以存储...或传输的格式的过程...以及稍后重建(可能在不同的计算机环境中) 为什么需要上述的转换? 当你创建一个Python对象时,它可能指向其他Python对象,并且这些对象都分配在不同的内存区域中,并且...

xl.zhang的博客 4914

使用Apache Ignite优化Spark作业性能(第1部分)

快来看看他们是如何工作的! 本文的某些部分摘自我的书《 Apache Ignite的高性能内存计算》 。 如果您对这篇文章感兴趣,请查看本书的其余部分,以获取更多有用的信息。 Apache Ignite提供了几种提高Spark作业性能的方法:Ignite RDD(将Ignite缓存表示为Spark RDD抽象)和Ignite IGFS(可透明地插入Spark部署中的内存文件系统)。 Ig...

最佳 Java 编程 253

清理apache共享内存引起的oracle宕机

我的平台是redhat as 3 ,oracle9204. 其他应用是apache,resin等。 因为以前发现apache运行时间长以后会出现共享内存不足的错误,具体错误信息如下: [Fri Apr 13 06:00:03 2007] [error] shm.create(): error creating shm 2 No such file or directory [Fri Apr 13 06:00:03 2007] [error] shm.create(): error creating s.

zhangge3663的博客 305

共享内存(Shared Memory)介绍

共享内存是常用的进程间通信,两个进程可以直接共享访问同一块内存区域。

wangrl的博客 3万+

APR(Apache Portable Run-time Librarie)介绍

Apache Portable Run-time Librarie 在早期的Apache版本中,应用程序本身必须能够处理各种具体操作系统平台的细节,并针对不同的平台调用不同的处理函数。随着Apache的进一步开发,Apache组织决定将这些通用的函数独立出来并发展成为一个新的项目。这样,APR的开发就从Apache中独立出来,Apache仅仅是使用APR而已。   目前APR主要还是由

herobox的专栏 7467

About APR

我是特别赞成在小项目中使用前人轮子的, 一是可以使有限的资源投入到业务流上,不用为底层小细节伤脑精;另外一个是优秀的库会使我们的代码更易用,易移植,也更强壮;我们从使用优秀的库中吸取程序设计的精髓譬如设计模型、程序技巧等等。   APR是一个历史悠久的优秀的库,下面是摘自《Apache模块开发》;   Apache可移植运行时库 The Apache Portable Runtime

天才萌想家的专栏 2627
下一篇: Linux下的Apache性能参数在线调节系统
chenxe69
博客等级 码龄21年 0粉丝 4原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值