【linuxC语言】获取进程信息

文章目录

  • 前言
  • 一、getrusage函数
  • 二、示例代码
  • 总结


前言

在Linux环境下,了解和获取进程的信息对于系统监控、性能优化以及调试等任务至关重要。C语言作为Linux系统编程的主要语言之一,提供了丰富的系统调用和库函数,可以帮助我们轻松地获取进程相关的信息。本文将介绍如何使用C语言编写代码来获取进程的信息,并举例说明如何获取进程的ID、命令行参数、状态等信息,以及如何获取进程的资源使用情况。


一、getrusage函数

getrusage() 函数用于获取进程或其子进程的资源使用情况。资源使用情况包括 CPU 时间、内存、文件 I/O 等。它的原型定义在 <sys/resource.h> 头文件中。

下面是 getrusage() 函数的原型:

#include <sys/resource.h>

int getrusage(int who, struct rusage *usage);

参数 who 指定了要获取资源使用情况的进程类型。常用的取值有:

RUSAGE_SELF:获取调用进程的资源使用情况。
RUSAGE_CHILDREN:获取所有子进程的资源使用情况。

如果你使用 RUSAGE_CHILDREN 参数来获取子进程的资源使用情况,那么 getrusage() 函数将会返回所有子进程的总和,而不是单个进程的信息。如果你需要获取单个进程的信息,你可以使用其他方法,比如通过进程的ID来获取该进程的信息。

一种方法是使用 getrusage() 函数来获取特定进程的资源使用情况,但是它只能获取到调用它的进程的资源使用情况,而无法获取其他进程的信息。

其他特殊值还有 RUSAGE_THREAD 用于获取当前线程的资源使用情况(Linux特有)。
参数 usage 是一个指向 struct rusage 结构的指针,用于存储获取到的资源使用情况信息。

下面是 struct rusage 结构的定义:

struct rusage {
    struct timeval ru_utime; /* 用户 CPU 时间 */
    struct timeval ru_stime; /* 系统 CPU 时间 */
    long   ru_maxrss;         /* 最大常驻集大小(以 kBytes 为单位) */
    long   ru_ixrss;          /* 未使用 (历史遗留) */
    long   ru_idrss;          /* 未使用 (历史遗留) */
    long   ru_isrss;          /* 未使用 (历史遗留) */
    long   ru_minflt;         /* 缺页错误次数 */
    long   ru_majflt;         /* 分页错误次数 */
    long   ru_nswap;          /* 未使用 (历史遗留) */
    long   ru_inblock;        /* 从块设备中读取的块数量 */
    long   ru_oublock;        /* 向块设备写入的块数量 */
    long   ru_msgsnd;         /* 发送的消息数量 */
    long   ru_msgrcv;         /* 接收的消息数量 */
    long   ru_nsignals;       /* 收到的信号数量 */
    long   ru_nvcsw;          /* 由于等待虚拟时钟转换而进行的上下文切换 */
    long   ru_nivcsw;         /* 由于除了等待虚拟时钟转换之外的原因进行的上下文切换 */
};

在这里插入图片描述

二、示例代码

下面是一个简单的示例代码,演示如何使用 getrusage() 函数获取进程的资源使用情况:

#include <stdio.h>
#include <sys/resource.h>

int main() {
    struct rusage usage;

    if (getrusage(RUSAGE_SELF, &usage) == -1) {
        perror("getrusage");
        return 1;
    }

    printf("用户 CPU 时间:%ld 微秒\n", usage.ru_utime.tv_usec);
    printf("系统 CPU 时间:%ld 微秒\n", usage.ru_stime.tv_usec);
    printf("缺页错误次数:%ld\n", usage.ru_minflt);
    printf("分页错误次数:%ld\n", usage.ru_majflt);

    return 0;
}

在这里插入图片描述

在这个示例中,我们使用 getrusage() 函数获取当前进程的资源使用情况,并打印了用户 CPU 时间、系统 CPU 时间、缺页错误次数和分页错误次数。


总结

通过本文的介绍,我们了解了如何使用C语言编程获取进程的信息。首先,我们可以使用系统调用getpid()来获取当前进程的ID,也可以使用getppid()获取当前进程的父进程ID。其次,我们可以通过读取/proc文件系统下的相应文件,比如/proc/[PID]/cmdline来获取进程的命令行参数,通过/proc/[PID]/status来获取进程的状态等信息。最后,我们还介绍了如何使用getrusage()函数来获取进程的资源使用情况,包括CPU时间、内存等。

总的来说,通过C语言编程获取进程的信息是一项相对简单而强大的任务,可以帮助我们更好地理解和监控系统的运行情况,为系统管理和优化提供有力的支持。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

导数之光:探寻机器学习中的微变奥秘

在当今这个数据驱动的时代&#xff0c;机器学习以其强大的学习和预测能力&#xff0c;成为了推动科技进步的重要力量。而在机器学习的背后&#xff0c;数学原理&#xff0c;尤其是导数的应用&#xff0c;为其提供了坚实的理论支撑。本文将详细探讨导数在机器学习中的体现&#…

职场商务口才能力精品课

职场商务口才能力精品课&#xff08;3篇&#xff09; 以下是关于职场商务口才能力的三篇精品课内容概述&#xff1a; **篇&#xff1a;基础篇——商务口才的基石 课程主题&#xff1a;商务口才的基础技能与心态建设 内容概要&#xff1a; 商务口才的重要性&#xff1a;首先强…

告别JSON慢时代!Msgpack:数据传输界的隐秘加速器 eksposed!

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

ThreeJS:坐标辅助器与轨道控制器

ThreeJS与右手坐标系 使用ThreeJS创建3D场景时&#xff0c;需要使用一个坐标系来定位和控制对象的位置和方向。 ThreeJS使用的坐标系是右手坐标系&#xff0c;即&#xff1a;X轴向右、Y轴向上、Z轴向前&#xff0c;如下图所示&#xff0c; ThreeJS-右手坐标系 Tips&#xff1a;…

鸿蒙学习1概况

鸿蒙学习1相关概念 前言相关概念Stage 模型1. AbilityStage2. UIAbility组件和ExtensionAbility组3. WindowStage4. Context 事件传递UIAbility组件与UI的数据同步UIAbility组件间交互&#xff08;设备内&#xff09; 进程模型线程模型 前言 有时间多看官网&#xff0c;官网的…

ctfshow web78 获取flag(用老版的火狐浏览器)

题&#xff1a; 第一种&#xff1a;利用input伪协议 ,获取到flag ?filephp://input POST data <?php system(tac ls) ?> 第二种&#xff1a;利用flter协议,获取到flag https://21d9e58a-c0fd-47ea-a9c4-d875100f2fdb.challenge.ctf.show/?filephp://filter/readcon…

如何彻底删除python

点击菜单栏中的“开始”&#xff0c;打开“运行”。 在运行上输入“cmd”&#xff0c;点击“确定”&#xff0c;接着输入“python --version”&#xff0c;得到一个程序的版本。 然后到这个网上下载对应的程序的版本&#xff0c;接着点击这个版本软件&#xff0c;点击这个卸载。…

java入门-日期类

日期类 Date类 Date类表示特定的时间&#xff0c;可以精确到毫秒。 获取Date对象 Date date new Date(); 构造方法 /*** Allocates a <code>Date</code> object and initializes it so that* it represents the time at which it was allocated, measured to…

WebStorm2024版 将项目上传到gitee

目录 一、准备 WebStorm gitee 二、上传代码到Gitee 三、过程中遇到的问题 报错&#xff1a;You may want to first integrate the remote changes (e.g., git pull ...) before pushing again. 报错&#xff1a;fatal: refusing to merge unrelated histories 报错&a…

Linux深入学习内核 - 中断与异常(下)

软中断&#xff0c;Tasklet和Work Queue 由内核执行的几个任务之间有一些不是紧急的&#xff0c;他们可以被延缓一段时间&#xff01;把可延迟的中断从中断处理程序中抽出来&#xff0c;有利于使得内核保持较短的响应时间&#xff0c;所以我们现在使用以下面的这些结构&#x…

【linux】进程间通信(匿名管道)

对于本篇文章我们采取三段论&#xff1a;是什么 为什么 怎么办。 目录 进程间为什么要通信&#xff1f;进程间如何通信&#xff1f;进程间怎么通信&#xff1f;匿名管道&#xff1a;匿名管道原理&#xff1a;代码示例&#xff1a;匿名管道的情况与特征&#xff1a; 进程间为什…

双指针(C++)

文章目录 1、移动零2、复写零3、快乐数4、盛最多水的容器5、有效三角形的个数6、和为s的两个数7、三数之和8、四数之和 需要理解的是&#xff0c;双指针并非只有指针&#xff0c;双指针的意思是两个位置。比如对于数组来说&#xff0c;两个下标也是双指针。当然&#xff0c;也可…

二叉树中的最大路径和 - LeetCode 热题 50

大家好&#xff01;我是曾续缘&#x1f638; 今天是《LeetCode 热题 100》系列 发车第 50 天 二叉树第 15 题 ❤️点赞 &#x1f44d; 收藏 ⭐再看&#xff0c;养成习惯 二叉树中的最大路径和 二叉树中的 路径 被定义为一条节点序列&#xff0c;序列中每对相邻节点之间都存在一…

冯喜运:5.2黄金触底反弹今日还会跌吗?原油最新行情分析策略

【黄金消息面分析】&#xff1a;周三(5月1日)&#xff0c;受美联储主席鲍威尔讲话影响&#xff0c;现货黄金价格暴涨近33美元&#xff1b;周四亚市早盘&#xff0c;现货黄金守住涨幅&#xff0c;目前交投于2323.69美元/盎司。此外&#xff0c;美联储主席鲍威尔(Jerome Powell)未…

RoNID:通过生成可靠标签与聚类友好型表征来实现新意图的发现

论文地址&#xff1a;https://arxiv.org/abs/2404.08977 原文地址&#xff1a;intents-are-not-going-away-ronid-is-a-new-intent-discovery-framework 2024 年 4 月 26 日 Robust New Intent Discovery&#xff08;RoNID&#xff09;框架致力于在开放域场景中识别已知意图并合…

树莓派控制步进电机(上):硬件连接

目录 说明 硬件连接 DM542的连接方法 树莓派的连接方法 参考文献 说明 最近需要测试树莓派控制步进电机的功能&#xff0c;在查阅网上资料的基础上做了一些整理和测试&#xff0c;特别记录在此。这里我们使用的是树莓派4B开发板&#xff0c;步进电机为6线两相步进电机&am…

探索APP分发的含义和小猪APP分发平台的优势(小猪APP分发平台)

一、APP分发的基本含义 APP分发指的是将开发完成的APP通过特定渠道推广给用户的过程。这个过程涵盖探索APP分发的含义和小猪APP分发平台的优势了从提交、审核到发布的全过程探索APP分发的含义和小猪APP分发平台的优势&#xff0c;目的是让APP更好地触达潜在用户探索APP分发的含…

AI时代程序员必备的22个网站,你了解多少?

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …

2024-05-02 商业分析-杭州小万科技-商业模式分析

摘要: 对杭州小万科技的商业模式进行分析,以对其做出客观的评估。 杭州小万科技的资料: 杭州小万科技有限公司 - 企知道 (qizhidao.com) 杭州小万科技有限公司网站备案查询 - 天眼查 (tianyancha.com) 杭州小万科技有限公司 - 爱企查 (baidu.com) ​ 2023年年报:

高中数学:三角函数公式汇总及推导

一、定义 常用三角函数值 参考&#xff1a; 三角函数定义 二、基本三角函数及相互关系 sinx cosx tanx cscx secx cotx 函数间相互关系 参考&#xff1a; cosx、sinx、tanx的函数图像与性质 secx、cscx、cotx函数图像及相关关系 三、诱导公式 口诀&#xff1a;奇变…