#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
 
转自:http://blog.sina.com.cn/s/blog_4c451e0e0101cmrq.html

Linux 下用管道执行 ps aux | grep 进程ID 来获取CPU与内存占用率的更多相关文章

  1. linux ps命令,查看某进程cpu和内存占用率情况, linux ps命令,查看进程cpu和内存占用率排序。 不指定

    背景:有时需要单看某个进程的CPU及占用情况,有时需要看整体进程的一个占用情况.一. linux ps命令,查看某进程cpu和内存占用率情况[root@test vhost]# ps auxUSER  ...

  2. linux ps命令,查看进程cpu和内存占用率排序(转)

    使用以下命令查看: ps -aux | sort -k4,4n ps auxw --sort=rss ps auxw --sort=%cpu linux 下的ps命令 %CPU 进程的cpu占用率 % ...

  3. 【转载】Linux下查看CPU、内存占用率

    不错的文章(linux系统性能监控--CPU利用率):https://blog.csdn.net/ctthuangcheng/article/details/52795477 在linux的系统维护中 ...

  4. Linux下查看CPU、内存占用率

    linux下查看最消耗CPU.内存的进程 CPU占用最多的前10个进程: ps auxw|head -1;ps auxw|sort -rn -k3|head -10 内存消耗最多的前10个进程: ps ...

  5. linux系统cpu和内存占用率

    1.top 使用权限:所有使用者 使用方式:top [-] [d delay] [q] [c] [S] [s] [i] [n] [b] 说明:即时显示process的动态 d :改变显示的更新速度,或 ...

  6. wince下的CPU和内存占用率计算

    #include <Windows.h> DWORD Caculation_CPU(LPVOID lpVoid) { MEMORYSTATUS MemoryInfo; DWORD Perc ...

  7. Linux下java nohup 后台运行关闭后进程停止的原因,不挂断后台运行命令

    Linux下java nohup 后台运行关闭后进程停止的原因,不挂断后台运行命令 今天写sh脚本发现一终止命令程序就停止运行了,检查了很久才发现后面少了个&字符导致的!错误写法:nohup ...

  8. Linux下使用java获取cpu、内存使用率

    原文地址:http://www.voidcn.com/article/p-yehrvmep-uo.html 思路如下:Linux系统中可以用top命令查看进程使用CPU和内存情况,通过Runtime类 ...

  9. linux命令ps aux|grep xxx详解

    对进程进行监测和控制,首先必须要了解当前进程的情况,也就是需要查看当前进程, 而ps命令(Process Status)就是最基本同时也是非常强大的进程查看命令. 使用该命令 可以确定有哪些进程正在运 ...

随机推荐

  1. vivado2015.4 simulator 存储所有信号到 .wdb 文件 并打开波形文件查看波形

    OS WIN7vivado 2015.4vivado自带的仿真器 vivado project 包含一个block design, block design 中包含AXIPCIE, MIG, INTE ...

  2. Fiddlercore Demo - Fiddler

    public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Loa ...

  3. PostgreSQL PL/Python 和 PL/Postgres 函数互相调用

    create or replace function hello(name text) returns text as $$ # str = name+',你吃饭了吗?'; # return 'hel ...

  4. lua -- 商店控制器部分

    -- 创建商店类,继承了Behavior local UIShopController = class("UIShopController", Behavior); -- 包含并引 ...

  5. NonWindowJoin

    package org.apache.flink.table.runtime.join /** * Connect data for left stream and right stream. Bas ...

  6. 动态SQL中 实现条件参数 varchar类型的参数名称 以及模糊查询实现

    set @strSQL='select * from testtable AS P WHERE P.Type='+@PType+' and P.PName ='''+@PName+''' and P. ...

  7. Kafka 协议实现中的内存优化【转】

    Kafka 协议实现中的内存优化   Jusfr 原创,转载请注明来自博客园 Request 与 Response 的响应格式 Request 与 Response 都是以 长度+内容 形式描述, 见 ...

  8. asp.net读取用户控件,自定义加载用户控件

    1.自定义加载用户控件 ceshi.aspx页面 <html> <body> <div id="divControls" runat="se ...

  9. Vue2键盘事件:keydown/keyup...

    Vue2键盘事件:keydown/keyup... 1.使用 <!DOCTYPE html> <html> <head> <title></tit ...

  10. import-module的注意事项与NDK_MODULE_PATH的配置

    转:http://blog.sina.com.cn/s/blog_4057ab62010197z8.html 具体的语句多参考其他正确的Android.mk   import-module的功能 导入 ...