查看某个进程的CPU占用(如何查看线程使用情况)

文章下方附学习资源 请自主领取

大家好,我是杂烩君。

嵌入式Linux开发中,有时候为了定位问题,需要查看某个进程的各个线程的运行情况。

例子

multi_thread.c:

左右滑动查看全部代码>>>

#define _GNU_SOURCE
#include#include#include#include// 线程名称最大长度
#define APP_THREAD_NAME_MAX_LEN     32

// 线程索引
typedef enum _app_thread_index
{
    APP_THREAD_INDEX_TEST0,
    APP_THREAD_INDEX_TEST1,
    APP_THREAD_INDEX_TEST2,
    APP_THREAD_INDEX_TEST3,
    APP_THREAD_INDEX_TEST4,
    APP_THREAD_INDEX_TEST5,
    APP_THREAD_INDEX_MAX
}app_thread_index_e;

// 线程入口函数指针类型
typedef void *(*p_thread_fun)(void *param);

// 线程数据表
typedef struct _app_thread
{
    pthread_t thread_handle;
    p_thread_fun thread_entry;
    char name[APP_THREAD_NAME_MAX_LEN];
}app_thread_s;

static void *test0_thread_entry(void *param);
static void *test1_thread_entry(void *param);
static void *test2_thread_entry(void *param);
static void *test3_thread_entry(void *param);
static void *test4_thread_entry(void *param);
static void *test5_thread_entry(void *param);

// 线程表
app_thread_s s_app_thread_table[APP_THREAD_INDEX_MAX] =
{
    {0, test0_thread_entry, "test0_thread"},
    {0, test1_thread_entry, "test1_thread"},
    {0, test2_thread_entry, "test2_thread"},
    {0, test3_thread_entry, "test3_thread"},
    {0, test4_thread_entry, "test4_thread"},
    {0, test5_thread_entry, "test5_thread"}
};

static void *test0_thread_entry(void *param)
{
    printf("test0_thread running...\n");

    while (1)
    {
        usleep(2 * 1000);
    }
    
    return NULL;
}

static void *test1_thread_entry(void *param)
{
    printf("test1_thread running...\n");

    while (1)
    {
        usleep(2 * 1000);
    }
    
    return NULL;
}

static void *test2_thread_entry(void *param)
{
    printf("test2_thread running...\n");

    while (1)
    {
        usleep(2 * 1000);
    }
    
    return NULL;
}

static void *test3_thread_entry(void *param)
{
    printf("test3_thread running...\n");

    while (1)
    {
        usleep(2 * 1000);
    }
    
    return NULL;
}

static void *test4_thread_entry(void *param)
{
    printf("test4_thread running...\n");

    while (1)
    {
        usleep(2 * 1000);
    }
    
    return NULL;
}

static void *test5_thread_entry(void *param)
{
    printf("test5_thread running...\n");

    while (1)
    {
        usleep(2 * 1000);
    }
    
    return NULL;
};

static int create_all_app_thread(void)
{
    int ret = 0;

    for (int i = 0; i < APP_THREAD_INDEX_MAX; i  )
    {
        ret = pthread_create(&s_app_thread_table[i].thread_handle, NULL, s_app_thread_table[i].thread_entry, NULL);

        if (0 != ret)
        {
            printf("%s thread create error! thread_id = %ld\n", s_app_thread_table[i].name, s_app_thread_table[i].thread_handle);
            return ret;
        }
        else
        {
            printf("%s thread create success! thread_id = %ld\n", s_app_thread_table[i].name, s_app_thread_table[i].thread_handle);
            pthread_setname_np(s_app_thread_table[i].thread_handle, s_app_thread_table[i].name);
        }

        pthread_detach(s_app_thread_table[i].thread_handle);
    }

    return ret;
}

int main(int argc, char **argv)
{ 
    create_all_app_thread();
    
    while (1)
    {
        usleep(2 * 1000);
    }

    return 0;
}

嵌入式物联网需要学的东西真的非常多,千万不要学错了路线和内容,导致工资要不上去!

无偿分享大家一个资料包,差不多150多G。里面学习内容、面经、项目都比较新也比较全!某鱼上买估计至少要好几十。

点击这里找小助理0元领取:嵌入式物联网学习资料(头条)

我们可以通过top命令来查看。要在top输出中开启线程查看,请调用top命令的“-H”选项,该选项会列出所有Linux线程。

这里我们指定查看multi_thread进程的各线程运行情况,命令:

top -H -p `pidof multi_thread`

注意:

这里的 `号并不是单引号!!!

这里的 `号并不是单引号!!!

这里的 `号并不是单引号!!!

这个符号在键盘上感叹号!键的左边。

我们先运行程序,再使用top命令查看,如:

注意,我们创建线程的时候需要使用 pthread_setname_np 函数设置线程的名字,否则top -H显示不出来具体的线程。

假如我们把上例中的pthread_setname_np屏蔽掉,结果如:

可见,不调用pthread_setname_np设置线程名称的话,top -H查看得到的各线程名称就是进程名。

原文作者:ZhengNL

原文来源:嵌入式大杂烩

原文链接:
       https://mp.weixin.qq.com/s/DURT5jhAWWFhsaHHB_qi4w

(0)

相关推荐

  • 如何解决explorer.exe进程导致CPU占用过高问题

    电脑是现在十分常用的工具之一,有些用户遇到了explorer.exe进程导致CPU占用过高问题,想知道如何解决,接下来小编就给大家介绍一下具体的操作步骤.具体如下:1. 首先第一步先按下[Ctrl+S ...

  • wmiprvse.exe是什么进程?wmiprvse.exe cpu占用资源很高怎么禁用?

    wmiprvse.exe是什么进程? 一些Win7旗舰版用户反馈进程中wmiprvse.exe cpu占用高,那么要解决这个wmiprvse.exe CPU占用高的问题,首先来了解下wmiprvse. ...

  • win7 cpu占用过高怎么办? windows7cpu占用过高解决方法汇总

    方法一 1、驱动没有经过认证,造成CPU资源占用过高 大量的测试版的驱动在网上泛滥,造成了难以发现的故障原因。 2、防、杀毒软件造成故障 由于一些防、杀毒软加入了对网页、插件、邮件的随机监控,无疑增大 ...

  • SYSTEM进程的CPU占用率高怎么办

    用户有时可能会遇到SYSTEM 进程的CPU 长时间接近100%的情况. 要分析这个植障问题, 传统的方法是要在性能监视器里添加SYSTEM 的所有线程的CPU计数器,然后找出占用cpu最高的线程,再 ...

  • win7无操作时cpu占用多少正常

    没有运行什么软件的情况下,一般应该在0%--5%, 如果运行软件或游戏情况下就不确定了,需要看游戏大小.另外,电脑系统不同或者配置不同,CPU占用率也是不同的. 如果CPU占用率经常在90%以上,甚至 ...

  • win7借助procexp分析SYSTEM进程的CPU占用率问题

    用户有时可能会遇到SYSTEM 进程的CPU 长时间接近100%的情况. 要分析这个植障问题, 传统的方法是要在性能监视器里添加 SYSTEM 的所有线程的CPU计数器,然后找出占用cpu最高的线程, ...

  • 查看LINUX进程内存占用情况

    (1)top top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器 可以直接使用top命令后,查看%MEM的内容。可以选择按进程查看或 ...

  • Svchost.exe进程CPU占用100%解决探讨

    Svchost.exe进程CPU占用100%解决探讨

  • 查看Win7进程路径(监控软件是否有问题)确保使用安全

    每一次重装过系统之后,各种安全卫士以及杀毒类软件都是必备的防护工具,他们可以自动拦截一些非法程序的进程,以确保计算机工作环境的安全。但是,很多时候,我们会选择绕过安全软件进行安装,比如某些考试软件,或 ...