IT袋

当前位置:主页 > 经验教程 > 系统教程 >

Linux服务器查看进程每个线程的执行任务

Linux服务器查看进程每个线程的执行任务(2)

时间:2024-03-09 15:06:30 来源:IT袋 作者:马勇
导读:Linux服务器查看进程每个线程的执行任务,? 表示该进程没有与任何终端关联。 TIME (CPU Time): 进程使用的CPU总时间。这通常包括用户模式和内核模式的CPU时间。 CMD (Command Name/Line): 启动进程的命令名

Linux服务器查看进程每个线程的执行任务

?表示该进程没有与任何终端关联。
  • TIME(CPU Time): 进程使用的CPU总时间。这通常包括用户模式和内核模式的CPU时间。
  • CMD(Command Name/Line): 启动进程的命令名称或命令行。
  • 在这个输出中,你可以看到各种系统进程,如initkthreaddrcu_gp。这些都是Linux内核和初始化系统的一部分,它们在系统启动时自动启动,并在系统运行时持续运行。

    2. 使用top命令

    top命令是一个实时显示系统中各个进程的资源占用状况的监控工具。你可以通过按H键来显示线程,而不是进程。

    top命令运行时,按H,然后按P(按CPU使用率排序)或M(按内存使用率排序)来查看线程的详细信息。

    3. 使用htop命令

    htoptop的一个增强版,它提供了一个彩色的界面,并支持鼠标操作。在htop中,你可以直接看到每个进程下的线程,并按需要排序和筛选。

    首先,你需要安装htop

    sudo apt install htop  # 对于Debian/Ubuntu系统  sudo yum install htop  # 对于CentOS/RedHat系统

    然后,运行htop并查看进程和线程信息。

    $ htop

    Linux服务器查看进程每个线程的执行任务

    htop命令

    4. 使用gdb

    gdb是一个强大的调试工具,你也可以使用它来查看进程中的线程和它们的堆栈跟踪。

    gdb -p 进程ID  (gdb) info threads

    这将显示所有线程的列表。你可以使用thread 线程ID来切换到特定的线程,并使用bt命令来查看该线程的堆栈跟踪。

    如何使用gdb调试一个多线程的程序:

    multithread_example.c

    #include <stdio.h>
    #include <stdlib.h>
    #include <pthread.h>
    #include <unistd.h> // 用于sleep函数
    void *print_message_function(void *ptr) {
        long tid;
        tid = (long)ptr;
        printf("线程 #%ld 正在运行\n", tid);
        sleep(100); // 每个线程等待100秒
        pthread_exit(NULL);
    }
    int main() {
        pthread_t thread1, thread2;
        const long num_threads = 2;
        int rc;
        long t;
        for(t = 0; t < num_threads; t++) {
            printf("创建线程 %ld\n", t);
            if (t == 0) {
                rc = pthread_create(&thread1, NULL, print_message_function, (void *)t);
            } else {
                rc = pthread_create(&thread2, NULL, print_message_function, (void *)t);
            }
            if (rc) {
                printf("Error:无法创建线程, %d\n", rc);
                exit(-1);
            }
        }
        // 等待线程1和线程2完成
        pthread_join(thread1, NULL);
        pthread_join(thread2, NULL);
        // 所有线程已经结束,现在主线程可以退出
        pthread_exit(NULL);
    }

    相关阅读