ZABBIX后台代码二次开发、接口开发……
1 篇帖子 分页: 1 / 1
帖子273506521 » 2018年 4月 19日 15:38 星期四
server端,举个内存分配的例子,在初始化中:
if (SUCCEED != init_database_cache(&error))
{
zabbix_log(LOG_LEVEL_CRIT, "cannot initialize database cache: %s", error);
zbx_free(error);
exit(EXIT_FAILURE);
}
跟入到init函数中:
if (SUCCEED != (ret = zbx_mem_create(&hc_mem, CONFIG_HISTORY_CACHE_SIZE, "history cache",
"HistoryCacheSize", 1, error)))
{
goto out;
}
再跟入到zbx_mem_create()
有这样一段共享内存使用的代码:
if (-1 == (shm_id = shmget(IPC_PRIVATE, size, 0600)))
{
*error = zbx_dsprintf(*error, "cannot get private shared memory of size " ZBX_FS_SIZE_T " for %s: %s",
(zbx_fs_size_t)size, descr, zbx_strerror(errno));
goto out;
}

if ((void *)(-1) == (base = shmat(shm_id, NULL, 0)))
{
*error = zbx_dsprintf(*error, "cannot attach shared memory for %s: %s", descr, zbx_strerror(errno));
goto out;
}

if (-1 == shmctl(shm_id, IPC_RMID, NULL))
zbx_error("cannot mark shared memory %d for destruction: %s", shm_id, zbx_strerror(errno));
问题就是这里为什么最后要shmctl释放共享内存呢?难道zabbix不使用共享内存,如何做到进程间通讯,内存空间如何操作的?
1 篇帖子 分页: 1 / 1

登录

在线用户

正在浏览此版面的用户:没有注册用户 和 1 位游客