服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

Linux|Centos|Ubuntu|系统进程|Fedora|注册表|Bios|Solaris|Windows7|Windows10|Windows11|windows server|

服务器之家 - 服务器系统 - Linux - linux使用管道命令执行ps获取cpu与内存占用率

linux使用管道命令执行ps获取cpu与内存占用率

2022-12-26 13:46linux教程网 Linux

这篇文章主要介绍了linux使用管道命令执行ps获取cpu与内存占用率的示例,需要的朋友可以参考下

复制代码 代码如下:

#include <stdio.h>
#include <unistd.h>
int main()
{
    char caStdOutLine[1024]; // ps 命令的标准输出中的一行信息
    char* pcTmp = NULL;      // 指向以空格拆分后的字符串

 

    char caSelfPID[10];      // 自身进程的PID字符串
    char caPSCmd[24];        // "ps aux | grep PID"命令字符串

    memset( caSelfPID, 0, sizeof( caSelfPID ) );
    sprintf( caSelfPID,
             "%d",
             getpid() );

    memset( caPSCmd, 0, sizeof( caPSCmd ) );
    sprintf( caPSCmd,
             "ps aux | grep %d",
             getpid() );

    do // 非循环,只是为了方便控制分支层次,便于控制分支流向
    {
        // 通过创建一个管道,调用 fork 产生一个子进程,
        // 执行一个 shell 以运行命令来开启一个进程。
        // 这个进程必须由 pclose() 函数关闭。
        FILE* fp = popen( caPSCmd, // 一个指向以 NULL 结束的 shell 命令字符串的指针,
                                   // 这行命令将被传到 bin/sh 并使用 -c 标志,
                                   // 那么 shell 将执行这个命令从这个字符串中读取。
                          "r" );   // 文件指针连接到 shell 命令的标准输出

        if ( NULL == fp )
        {
            printf( "call popen is failed\n" );
            break;
        }

        memset( caStdOutLine, 0, sizeof( caStdOutLine ) );
        while ( NULL != fgets( caStdOutLine,
                               sizeof( caStdOutLine ),
                               fp ) )
        {
            // 再以空格分隔符拆分字符串
            pcTmp = strtok( caStdOutLine, " " );

            // 用户名跳过,直接匹配 PID ,不匹配跳过
            pcTmp = strtok( NULL, " " );
            if ( 0 != strncasecmp( caSelfPID,
                                   pcTmp,
                                   strlen( caSelfPID ) ) )
            {
                continue;
            }

            // 读出进程自身 CPU 占用率
            pcTmp = strtok( NULL, " " );
            printf( "CPU = %s %%\n", pcTmp );

            // 读出进程自身 MEM 占用率
            pcTmp = strtok( NULL, " " );
            printf( "MEM = %s %%\n", pcTmp );

            break;
        }

        // 关闭标准 I/O 流,等待命令执行结束,然后返回 shell 的终止状态。
        // 如果 shell 不能被执行,
        // 则 pclose() 返回的终止状态与 shell 已执行 exit 一样。
        pclose( fp );

    }while ( 0 );
}

 

 

复制代码 代码如下:

$ gcc main.c -o test
$ ./test
CPU = 1.0 %
MEM = 0.0 %

 

$ ps  aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
nsc      24505  1.0  0.0   2004   232 pts/0    S+   09:46   0:00 ./test

 

延伸 · 阅读

精彩推荐
  • LinuxLinux上如何安装使用音乐软件SoundCloud

    Linux上如何安装使用音乐软件SoundCloud

    SoundCloud是个不错的音乐软件,SoundCloud是德国的网站,在Linux安装SoundCloud后,就能够在命令行中播放音乐,下面为大家介绍下Linux安装SoundCloud的方法 ...

    系统之家4272019-10-17
  • Linuxlinux下find查找命令用法

    linux下find查找命令用法

    这篇文章主要介绍了,Linux中find常见用法示例,需要的朋友可以参考下...

    linux之家4412019-06-11
  • Linuxlinux系统中轻量级内核虚拟化技术LXC安装部署实践

    linux系统中轻量级内核虚拟化技术LXC安装部署实践

    什么是LXC?LXC 中文名称就是 Linux 容器工具,如何在linux系统中安装轻量级内核虚拟化技术LXC?脚本之家的小编将会在下文分享中轻量级内核虚拟化技术LX...

    linux教程网2752019-10-31
  • Linux详解Linux上svn命令行批量操作

    详解Linux上svn命令行批量操作

    这篇文章主要介绍了详解Linux上svn命令行批量操作的相关资料,linux上的svn命令行批量添加或删除文件,需要的朋友可以参考下...

    阿信sxq10932022-02-12
  • Linuxlinux下设定环境变量的方法介绍

    linux下设定环境变量的方法介绍

    在linux下设定环境变量时,如果只是临时用一下,可以直接在shell下用set或export命令设定环境变量,如果希望此环境变量每次开机或打开 shell时自动设定而无...

    Linux教程网3422019-12-19
  • Linux详解在Linux中清空或删除大文件内容的5种方法

    详解在Linux中清空或删除大文件内容的5种方法

    这篇文章主要介绍了详解在Linux中清空或删除大文件内容的5种方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    everfigt13912022-08-05
  • LinuxMac强制关机的4种方法以备不时之需

    Mac强制关机的4种方法以备不时之需

    电脑会突然间卡了,然后鼠标什么都动不了,等待了一段时间后,也没有任何反应,这时就需要强制关机了,下面与大家分享下强制关机的方法 ...

    系统之家4142019-10-23
  • Linux如何在 Linux 上正确使用 cat 命令

    如何在 Linux 上正确使用 cat 命令

    cat 可能是您将在 Linux 上首先学习的命令之一。以下是在 Linux 上使用 cat 的正确方法(和错误方法)。...

    Linux迷9402022-08-10