【分享】C/C++获取top中显示的线程id,C/C++获取lwpid

原创文章,转载请注明: 转载自勤奋的小青蛙
本文链接地址: 【分享】C/C++获取top中显示的线程id,C/C++获取lwpid

在Linux中,我们可以通过如下命令查看多线程程序的执行情况:

top -H -p pid

例如:如下top显示界面:

top1

如上图所示,PID为:12982的线程,cpu占用率达到320%,其实这个程序是一个多线程程序,那么我们想看它的子线程,那么如何查看呢?

通过如下命令即可:

top -H -p 12982

结果如下图:

top2

通过上图,我们便可以看到该进程下面有多个子线程在运行,只不过占据着不同的 cpu 核心。

那么,我们如何在程序里去获得这些 PID 的值呢?

方法如下:

#include <stdio.h>
#include <sys/syscall.h>//Linux system call for thread id
#include <assert.h>
#include <pthread.h>

void *nbi(void *arg)
{
        int i;
        printf("child thread lwpid = %u\n", syscall(SYS_gettid));
        printf("child thread tid = %u\n", pthread_self());
        scanf("%d", i);//code dump
}
int main()
{
        pthread_t tid;
        int rc;
        printf("main thread lwpid = %u\n", syscall(SYS_gettid));
        printf("main thread tid = %u\n", pthread_self());
        rc = pthread_create(&tid, NULL, nbi, NULL);
        assert(0 == rc);
        pthread_join(tid, NULL);

        return 0;
}

请注意方法:syscall(SYS_gettid),这个方法所获取的lwpid,正是在top中显示出来的 PID.

更多参考:http://blog.csdn.net/happen23/article/details/41777749

原创文章,转载请注明: 转载自勤奋的小青蛙
本文链接地址: 【分享】C/C++获取top中显示的线程id,C/C++获取lwpid

文章的脚注信息由WordPress的wp-posturl插件自动生成



|2|left
打赏

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: