云恒制造:如何监控各个线程的资源占用情况?

嵌入式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; }
<

我们可以通过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查看得到的各线程名称就是进程名。

本文转载自公众号全栈芯片工程师,版权归原作者所有,不代表本站观点,如有侵权请与本站联系,本站将第一时间删除

京云律所-东台站 京云律所-兴安站 京云律所-龙岩站 京云律所-原平站 京云律所-泉州站 京云律所-五常站 京云律所-冷水江站 京云律所-怀化站 京云律所-牡丹江站 京云律所-赣州站 京云律所-海东站 京云律所-深圳站 京云律所-黔西南布依族站 京云律所-唐山站 京云律所-海宁站 京云律所-辛集站 京云律所-临江站 京云律所-林芝站 京云律所-霍林郭勒站 京云律所-射洪站 京云律所-高碑店站 京云律所-阿坝站 京云律所-恩施站 京云律所-开原站 京云律所-阆中站 京云律所-临清站 京云律所-瑞昌站 京云律所-康定站 京云律所-平度站 京云律所-龙港站 京云律所-临沂站 京云律所-阿图什站 京云律所-宁德站 京云律所-柳州站 京云律所-宜城站 京云律所-邛崃站 京云律所-临夏站 京云律所-雷州站 京云律所-龙南站 京云律所-永安站 京云律所-安陆站 京云律所-孝义站 京云律所-石狮站 京云律所-乌兰察布站 京云律所-吉首站 京云律所-克孜勒苏站 京云律所-津市站 京云律所-文山壮族站 京云律所-台山站 京云律所-永城站 京云律所-新密站 京云律所-贵港站 京云律所-青州站 京云律所-乌苏站 京云律所-连云港站 京云律所-高邮站 京云律所-卫辉站 京云律所-绥化站 京云律所-扬州站 京云律所-营口站 京云律所-呼和浩特站 京云律所-清远站 京云律所-凤城站 京云律所-崇左站 京云律所-资兴站 京云律所-太仓站 京云律所-荆州站 京云律所-肥城站 京云律所-池州站 京云律所-鹰潭站 京云律所-晋城站 京云律所-随州站 京云律所-虎林站 京云律所-玉树站 京云律所-邯郸站 京云律所-广德站 京云律所-济南站 京云律所-长治站 京云律所-广安站 京云律所-武夷山站 京云律所-淄博站 京云律所-任丘站 京云律所-大同站 京云律所-丹江口站 京云律所-沙河站 京云律所-黄南站 京云律所-新泰站 京云律所-张家口站 京云律所-平果站 京云律所-绥芬河站 京云律所-利川站 京云律所-湘潭站 京云律所-错那站 京云律所-英德站 京云律所-敦化站 京云律所-武穴站 京云律所-驻马店站 京云律所-简阳站 京云律所-嫩江站 京云律所-湖州站

免责声明:文章内容来自互联网,本站仅提供信息存储空间服务,真实性请自行鉴别,本站不承担任何责任,如有侵权等情况,请与本站联系删除。

(0)
云恒制造:图像显示MIPI接口
上一篇 2023-05-03 17:25:55
云恒制造:在ROS中基于颜色做简单的物体识别
下一篇 2023-05-03 17:28:30

联系我们

在线咨询: QQ交谈

邮件:362039258#qq.com(把#换成@)

工作时间:周一至周五,10:30-16:30,节假日休息。