docker容器内的进程启动监控,容器进程所在的PID namespce

在容器内启动进程
docker exec -it 9c6b0b0509da  /bin/bash
cd /home
./testapp


主机上的监控程序同样可以监控到

 13022 /home/testapp
!!!!!发现异常进程:testapp, exePath:/home/testapp

GetExePath()函数返回的值是/home/testapp ,即:进程执行文件所在容器内的目录路径

func (p *Process) GetExePath() (string, error) {ret, err := os.Readlink("/proc/" + p.Pid + "/exe")//println("Readlink:Pid: %d, linkpath:%s \n", p.Pid, ret)if err != nil {return "", err}ret = strings.TrimSpace(ret)p.ExePath = retreturn ret, nil
}

通过访问宿主机进程下的虚拟目录系统发现可以访问到容器内的目录内容
cd /proc/13022/root/home   //和容器内的/home目录一致

所以要获取容器进程的目录需要在返回的目录前加上/proc/" + p.Pid+ "/"

func (p *Process) GetExePath() (string, error) {ret, err := os.Readlink("/proc/" + p.Pid + "/exe")//println("Readlink:Pid: %d, linkpath:%s \n", p.Pid, ret)if err != nil {return "", err}ret = strings.TrimSpace(ret)//p.ExePath = retret = "/proc/" + p.Pid + "/root" + ret //容器中的进程只能获取到容器内的相对目录,在宿主机上前面必须加"/proc/" + p.Pid+ "/" 才能获取到return ret, nil
}

//这样返回的路径是: /proc/9374/root/home/testapp/

访问容器内的进程文件所在目录


现在就可以通过proc虚拟目录系统类似快链接方式访问容器内目录,不需要获取到容器的实际挂载全路径。

宿主机进程和容器进程Pid的关系?
ps -a 发现容器内看到的进程号也和宿主机不同不是13022
具体映射关系可以后续研究


如何判断进程是否是在容器中运行的?以及所在容器

 /proc/<PID>/cgroup 有记录容器的ID,从而可以判定是某个容器内进程

方式1
查看进程的PID命名空间:每个进程都有一个PID命名空间,容器内的进程会有自己独立的PID命名空间,而宿主机上的进程则共享一个PID命名空间。

/proc/[PID]/ns/pid 文件记录了与该进程所在的 PID 命名空间的信息

可以通过查看进程的/proc/[PID]/ns/pid文件,如果该文件是一个符号链接,且指向的inode与宿主机上的/proc/1/ns/pid文件的inode相同,则说明该进程是宿主机启动的进程。

具体见:https://blog.csdn.net/lwyeluo/article/details/51803207

1、启动容器名字或id,通过docker **命令可以获取该容器的第一个进程的ID信息,通过该进程可以知道该容器的PID namespace标号;
2、同样容器内启动任意进程PID(主机上看到的)可以获取到所在namespace标号,这样就建立了容器和任意进程的关联。

方式2
查看进程的根文件系统:容器内的进程会有自己独立的根文件系统,而宿主机上的进程则使用宿主机的根文件系统。可以通过查看进程的/proc/[PID]/root目录,如果该目录是一个符号链接,且指向的路径与宿主机上的根文件系统路径不同,则说明该进程是容器内启动的进程。

方式3
查看进程的命令行参数:容器内的进程通常会有特定的命令行参数,用于标识其为容器内启动的进程。可以通过查看进程的/proc/[PID]/cmdline文件,查看其中的命令行参数是否包含容器相关的标识,如Docker、Kubernetes等

#查看容器ID列表
docker inspect -f "{{.Id}}" $(docker ps -q) |grep

#查看容器进程ID、容器ID、容器名称列表
docker inspect -f "{{.Id}} {{.State.Pid}} {{.Config.Hostname}}" $(docker ps -q) |grep

#查看容器内top占用进程信息
for i in `docker ps |grep Up|awk '{print $1}'`;do echo \ &&docker top $i &&echo ID=$i; done |grep -A 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/820753.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

不能在子类的初始化列表中初始化父类的成员

不能在子类的初始化列表中初始化父类的成员 错误示例代码 class A { protected:int n_; };class B : public A { public:B() : n_(0){} };编译报错如下&#xff1a; error: class ‘B’ does not have any field named ‘n_’前置知识 继承情况下的初始化顺序 子类对象的构…

FFmpeg: 自实现ijkplayer播放器--08视频解码线程设计

文章目录 视频解码解码流程视频解码线程音频解码线程数据帧队列类型定义数据帧队列api视频解码 视频解码,读取数据包(packet),生成数据帧(frame),放入数据帧队列,用来输出音频和视频 解码流程 stream_component_open: 分配解码器上下文 avcodec_alloc_context3将码…

高频九问:产品经理面试题解析

01 ▼ 需求评审时研发说需求实现不了怎么办&#xff1f; 1.站在技术的角度&#xff0c;了解无法实现的原因 2.看有哪些可以替代的方案 3.评估替代方案对项目本身的影响&#xff0c;如延迟&#xff0c;如若在可接受范围内&#xff0c;适当的妥协 02 ▼ 是否了解我们公司&a…

Flume配置案例@Source:文件,Channel+Sink:Kafka

Source&#xff1a;某个目录下所有文件 Channel&#xff1a;Kafka Sink&#xff1a;Kafka 【Source和Channel的选择】 1&#xff09;TailDirSource TailDirSource相比ExecSource、SpoolingDirectorySource的优势。 TailDirSource&#xff1a;断点续传、多目录。Flume1.6以前…

大模型微调技术概览解读(chatGLM-6B)

目录 一些比较流行的PEFT方案 Prompt Tuning Prefix Tuning LoRA QLoRA 引用链接 参考文档&#xff1a;通俗解读大模型微调(Fine Tuning) - 知乎 从参数规模的角度&#xff0c;大模型的微调分成两条技术路线&#xff1a; 一条是对全量的参数&#xff0c;进行全量的训练…

【从零开始手搓12306项目】五、如何保证不超卖、不少卖、还能承受极高的并发?

逻辑设计&模型实现 余票查询&#xff1a;记录站站余票 座位购买&#xff1a;记录座位销售详情&#xff08;将卖票变成01二进制数的计算&#xff09; 使用事务保证原子性

VMware设置静态ip:以Centos7为例

1、获取网段&#xff0c;子网掩码和网关 到此获取到的信息&#xff1a; 网段&#xff1a;192.168.204.128 ~ 192.168.204.254 子网掩码&#xff1a;255.255.255.0 网关IP&#xff1a;192.168.204.2 2、修改Centos系统的网络配置 使用命令vim /etc/sysconfig/network-scripts/…

Kotlin从0到1,让你一周快速上手!!

声明 大家好&#xff0c;这里是懒羊羊学长&#xff0c;如果需要pdf版以及其他资料&#xff0c;请加入群聊。群里每天更新面经、求职资料&#xff0c;经验分享等&#xff0c;大家感兴趣可以加一下。 Kotlin 声明1.Kotlin基础2. Kotlin函数3.Kotlin进阶4.Kotlin集合5.Kotlin高…

全球顶级的低代码开发平台,你知道几个?

什么是低代码开发平台? 低码开发平台是一个应用程序,提供图形用户界面编程,从而以非常快的速度开发代码,减少了传统的编程工作。 这些工具有助于快速开发代码,最大限度地减少手工编码的努力。这些平台不仅有助于编码,而且还能快速安装和部署。 低码开发工具的好处 低代码平…

【QT教程】QT6数据库操作

QT6数据库操作 使用AI技术辅助生成 QT界面美化视频课程 QT性能优化视频课程 QT原理与源码分析视频课程 QT QML C扩展开发视频课程 免费QT视频课程 您可以看免费1000个QT技术视频 免费QT视频课程 QT统计图和QT数据可视化视频免费看 免费QT视频课程 QT性能优化视频免费看 免费Q…

为什么公共云的弹性能力很难被发挥出来?

作者&#xff5c;王小瑞 AutoMQ 联合创始人 & CEO 云计算通过资源池化实现单位资源成本更优&#xff0c;使企业能够将 IDC 建设、基础软件研发和运维等工作外包给云厂商&#xff0c;从而更专注于业务创新。资源池不仅包括服务器&#xff0c;还包括人才。云厂商集聚了优秀…

ubuntu20.04.3挂载共享文件夹

VMware设置win共享文件夹 在linux执行挂载命令 sudo vmhgfs-fuse /mnt/hgfs/ -o nonempty这样就可以用管理员访问/mnt/hgfs/share

Java全套智慧校园系统源码springboot+elmentui +Quartz可视化校园管理平台系统源码 建设智慧校园的5大关键技术

Java全套智慧校园系统源码springbootelmentui Quartz可视化校园管理平台系统源码 建设智慧校园的5大关键技术 智慧校园指的是以物联网为基础的智慧化的校园工作、学习和生活一体化环境&#xff0c;这个一体化环境以各种应用服务系统为载体&#xff0c;将教学、科研、管理和校园…

Docker仅需3步搭建免费私有化的AI搜索引擎-FreeAskInternet

简介 FreeAskInternet 是一个完全免费、私有且本地运行的搜索引擎&#xff0c;并使用 LLM 生成答案&#xff0c;无需 GPU。用户可以提出问题&#xff0c;系统会进行多引擎搜索&#xff0c;并将搜索结果合并到ChatGPT3.5 LLM中&#xff0c;并根据搜索结果生成答案。 什么是 Fr…

3D视觉引导麻袋拆垛破包 | 某大型化工厂

客户需求 此项目为大型化工厂&#xff0c;客户现场每日有大量麻袋拆垛破包需求&#xff0c;麻袋软包由于自身易变形、码放垛型不规则、运输后松散等情况&#xff0c;无法依靠机器人示教位置完成拆垛。客户遂引入3D视觉进行自动化改造。 工作流程&#xff1a; 3D视觉对紧密贴合…

win10系统自带的md5文件校验用法

开始--运行&#xff0c;回车 certutil -hashfile 文件名 md5 其它功能可以看链接&#xff1a;certutil | Microsoft Learn

《剑指 Offer》专项突破版 - 面试题 107 : 矩阵中的距离(C++ 实现)

题目链接&#xff1a;矩阵中的距离 题目&#xff1a; 输入一个由 0、1 组成的矩阵 M&#xff0c;请输出一个大小相同的矩阵 D&#xff0c;矩阵 D 中的每个格子是矩阵 M 中对应格子离最近的 0 的距离。水平或竖直方向相邻的两个格子的距离为 1。假设矩阵 M 中至少有一个 0。 …

JavaScript事件监听测试代码

效果图 代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>信息填写页面</title><link …

反射【获取class对象、 操作属性、方法】

day38下 反射 前言 使用到一个类&#xff0c;JVM会将该类的class文件加载到方法区&#xff08;类加载机制&#xff09;&#xff0c; 同时会在堆内存中创建该类的class对象&#xff0c;class对象的作为class文件的访问入口 Java的反射机制 ​ JAVA反射机制是在运行状态中&…

在STM32中给固定的地址写入一个值,并通过memory窗口进行查看

首先对STM32中存储数据的地方有一个了解 一个是FLASH,一个是RAM RAM是易失存储器&#xff0c;FLASH是非易失存储器&#xff0c;这是最直观的解释。 主要记住以下几点&#xff1a; RAM&#xff08;随机存储器&#xff09;&#xff1a;既可以从中读取数据&#xff0c;也可以写…