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;

}
相关文章
|
27天前
|
移动开发 Linux
Linux下如何查看哪些进程占用的CPU内存资源最多
Linux下如何查看哪些进程占用的CPU内存资源最多
|
2月前
|
IDE Linux 开发工具
内存泄漏检测工具Valgrind:C++代码问题检测的利器(一)
内存泄漏检测工具Valgrind:C++代码问题检测的利器
95 0
|
2月前
|
安全 Linux 开发者
⭐⭐⭐⭐⭐Linux C/C++ 进程崩溃诊断以及有效数据收集:解锁代码问题快速定位与修复的方法
⭐⭐⭐⭐⭐Linux C/C++ 进程崩溃诊断以及有效数据收集:解锁代码问题快速定位与修复的方法
85 1
|
3天前
|
存储 开发者 Python
优化Python代码中的内存占用:实用技巧与最佳实践
本文将介绍如何优化Python代码中的内存占用,通过实用技巧和最佳实践,有效减少内存消耗,提升代码性能和可扩展性。
|
7天前
|
消息中间件 Linux
【linux进程间通信(二)】共享内存详解以及进程互斥概念
【linux进程间通信(二)】共享内存详解以及进程互斥概念
|
7天前
|
监控 Shell
Shell脚本监控CPU、内存和硬盘利用率
Shell脚本监控CPU、内存和硬盘利用率
|
14天前
|
监控 Linux
linux监控指定进程
请注意,以上步骤提供了一种基本的方式来监控指定进程。根据你的需求,你可以选择使用不同的工具和参数来获取更详细的进程信息。
14 0
|
22天前
|
监控 Java Linux
linux下监控java进程 实现自动重启服务
linux下监控java进程 实现自动重启服务
|
28天前
|
存储 监控 异构计算
【Python】GPU内存监控脚本
【Python】GPU内存监控脚本
|
2月前
|
存储 Linux 程序员
【Linux C/C++ 堆内存分布】深入理解Linux进程的堆空间管理
【Linux C/C++ 堆内存分布】深入理解Linux进程的堆空间管理
82 0

相关实验场景

更多