inotify代码实现监控自身进程内存变化

简介: inotify代码实现监控自身进程内存变化

以下代码基于inotify进行内存监控实现

JNIEXPORT jboolean JNICALL Java_com_TeSo_testinotify (JNIEnv *, jobject)
{
    LOGD("start work===============");
    int ret, len, i;
    int pid = getpid();
    const int MAXLEN = 2048;
    char buf[1024];
    char readbuf[MAXLEN] ={0};
    char result[256] ={0};
    int fd, wd;
    fd_set readfds;//定义文件描述符字的集合
    char *cur_event_filename = NULL;
    fd = inotify_init();//用于创建一个 inotify 实例的系统调用,并返回一个指向该实例的文件描述符

   sprintf(buf, "/proc/%d/maps", pid);
    LOGD("PId======%s",buf);
    wd = inotify_add_watch(fd, buf, IN_ALL_EVENTS);
    //增加对文件或者目录的监控,并指定需要监控哪些事件。标志用于控制是否将事件添加到已有的监控中
    if (wd >= 0) {
        while (1) {
            i = 0;
            FD_ZERO(&readfds); // 对文件描述符集清空
            FD_SET(fd, &readfds); // 将fd加入readfds集合
            ret = select(fd + 1, &readfds, 0, 0, 0);//检查套接字是否可读
            if (ret == -1) {
                break;
            }
            if (ret) {
                len = read(fd, readbuf, MAXLEN);//读取包含一个或者多个事件信息的缓存
                while (i < len) {
                    struct inotify_event *event = (struct inotify_event *) &readbuf[i];
                    //这里会出现自身扫描的时候访问内存也有数据情况,
                    if ((event->mask & IN_ACCESS) || (event->mask & IN_OPEN)) {
                        //int ret = kill(pid, SIGKILL);
                      LOGD("打开并访问了内存 ======%s",event->name);
                       //  kill(pid, SIGKILL); //强制关闭自身进程


                    }
                    //修改器重点修改内存在这块
                    if( (event->mask & IN_MODIFY))
                    {
                       // kill(pid, SIGKILL);
                        LOGD("修改了了了内存 =======%s",event->name);

                    }

                    i += sizeof(struct inotify_event) + event->len;
                }
            }
        }

    }

    inotify_rm_watch(fd, wd);//从监控列表中移出监控项目
    close(fd);

    return true;

}
相关文章
|
20天前
|
Web App开发 监控 JavaScript
监控和分析 JavaScript 内存使用情况
【10月更文挑战第30天】通过使用上述的浏览器开发者工具、性能分析工具和内存泄漏检测工具,可以有效地监控和分析JavaScript内存使用情况,及时发现和解决内存泄漏、过度内存消耗等问题,从而提高JavaScript应用程序的性能和稳定性。在实际开发中,可以根据具体的需求和场景选择合适的工具和方法来进行内存监控和分析。
|
1月前
麒麟系统mate-indicators进程占用内存过高问题解决
【10月更文挑战第7天】麒麟系统mate-indicators进程占用内存过高问题解决
195 2
|
4天前
|
算法 调度 开发者
深入理解操作系统:从进程管理到内存分配
本文旨在为读者提供一个深入浅出的操作系统知识之旅,从进程管理的基础概念出发,探索内存分配的策略与技巧。我们将通过实际代码示例,揭示操作系统背后的逻辑与奥秘,帮助读者构建起对操作系统工作原理的直观理解。文章不仅涵盖理论知识,还提供实践操作的指导,使读者能够将抽象的概念转化为具体的技能。无论你是初学者还是有一定基础的开发者,都能在这篇文章中找到有价值的信息和启发。
|
28天前
|
存储 JavaScript 前端开发
如何优化代码以避免闭包引起的内存泄露
本文介绍了闭包引起内存泄露的原因,并提供了几种优化代码的策略,帮助开发者有效避免内存泄露问题,提升应用性能。
|
2月前
|
缓存 Java 测试技术
谷粒商城笔记+踩坑(11)——性能压测和调优,JMeter压力测试+jvisualvm监控性能+资源动静分离+修改堆内存
使用JMeter对项目各个接口进行压力测试,并对前端进行动静分离优化,优化三级分类查询接口的性能
谷粒商城笔记+踩坑(11)——性能压测和调优,JMeter压力测试+jvisualvm监控性能+资源动静分离+修改堆内存
|
1月前
|
缓存 算法 调度
深入浅出操作系统:从进程管理到内存优化
本文旨在为读者提供一次深入浅出的操作系统之旅。我们将从进程管理的基本概念出发,逐步深入到内存管理的复杂世界,最终探索如何通过实践技巧来优化系统性能。文章将结合理论与实践,通过代码示例,帮助读者更好地理解操作系统的核心机制及其在日常技术工作中的重要性。无论你是初学者还是有一定经验的开发者,这篇文章都将为你打开一扇通往操作系统深层次理解的大门。
|
30天前
|
监控 数据可视化 Java
如何使用JDK自带的监控工具JConsole来监控线程池的内存使用情况?
如何使用JDK自带的监控工具JConsole来监控线程池的内存使用情况?
|
2月前
|
监控
MASM32写的免费软件“ProcView/系统进程监控” V1.4.4003 说明和下载
MASM32写的免费软件“ProcView/系统进程监控” V1.4.4003 说明和下载
|
1月前
麒麟系统mate-indicators进程占用内存过高问题解决
【10月更文挑战第5天】麒麟系统mate-indicators进程占用内存过高问题解决
149 0
|
2月前
|
监控 Ubuntu API
Python脚本监控Ubuntu系统进程内存的实现方式
通过这种方法,我们可以很容易地监控Ubuntu系统中进程的内存使用情况,对于性能分析和资源管理具有很大的帮助。这只是 `psutil`库功能的冰山一角,`psutil`还能够提供更多关于系统和进程的详细信息,强烈推荐进一步探索这个强大的库。
45 1

相关实验场景

更多
下一篇
无影云桌面