获取线程ID

 1 #include <pthread.h>
 2 #include <unistd.h>
 3 #include <stdio.h>
 4 #include <stdlib.h>
 5 #include <string.h>
 6 pthread_t ntid;
 7 /**
 8  *  功能:打印进程id,打印线程id。
 9  *  在编译时注意加上-lpthread参数,以调用静态链接库。因为pthread并非Linux系统的默认库
10  *  gcc pthread.c -lpthread -o pthread
11  */
12 void printids(const char *s)
13 {
14     pid_t pid;
15     pthread_t tid;
16     //获取当前进程id
17     pid = getpid();
18     //获取当前线程id
19     tid = pthread_self();//获得线程自身的ID
20     //打印当前进程id,打印当前线程id
21     printf("%s pid %u strerrortid %u (0x%x)\n", s, 22     (unsigned int)pid, (unsigned int)tid, (unsigned int)tid);
23 }
24
25 void *th_fn(void *arg)
26 {
27     printids(arg);
28     return NULL;
29 }
30
31 int main(void)
32 {
33
34     int err = 0;
 1 /*
 2 pthread_create函数
 3
 4 线程创建函数
 5
 6 头文件及函数原型
 7 #include<pthread.h>
 8 int pthred_creat(pthread_t *restrict tidp,const pthread_attr_t *restric  attr, void *(*start_rtn)(void *),void *restrict arg);
 9
10 参数
11 第一个参数为指向线程标识符的指针。
12 第二个参数用来设置线程属性。
13 第三个参数是线程运行函数的起始地址。
14 最后一个参数是运行函数的参数。
15
16 */

35     err = pthread_create(&ntid, NULL, th_fn, "new thread: ");
36     if (err != 0) {
37         fprintf(stderr, "errno: %s", strerror(err));
38         exit(1);
39     }
40     printids("main thread: ");
41     //为了不让进程比线程提前结束,延迟1秒执行
42     sleep(1);
43     return 0;
44 }
1 程序运行结果
2 main thread:  pid 3755 strerrortid 3814000384 (0xe3550700)
3 new thread:   pid 3755 strerrortid 3805734656 (0xe2d6e700)
时间: 2024-10-03 14:45:37

获取线程ID的相关文章

Linux下获取线程ID的方法

Linux下多线程程序发生coredump时,用 gdb /path/to/program/file core 可以看到所有线程 [email protected]:~/test/thread# gdb a.out core GNU gdb (GDB) 7.6.1 Copyright (C) 2013 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses

调用微软未公开ZwQueryInformationThread函数根据线程句柄获取线程ID

这段时间公司项目中为了支持XP系统同事代码中用到了 GetThreadId 这个微软的API 但是这个API最低支持版本是 Windows version Windows Vista [desktop apps | UWP apps] Windows Server 2003 [desktop apps | UWP apps] 最后使用了 ZwQueryInformationThread 来解决 解决以后记录下 如果又遇到同样问题的 可以参考 参考文档 http://undocumented.nt

安卓获取线程id

错误的做法: 1 @Override 2 public void onCreate() { 3 mContext = getApplicationContext(); 4 mHandler = new Handler(); 5 mMainThreadid = android.os.Process.myPid(); 6 super.onCreate(); 7 } 正确的做法: 1 @Override 2 public void onCreate() { 3 mContext = getApplic

Windows Minifilter驱动 - 获取进程ID, 进程名字和线程ID (5)

在minifilter里面可能有好几种获取调用进程id,名字和线程的办法.我这里有一种: 使用 PsSetCreateProcessNotifyRoutine 和 PsSetLoadImageNotifyRoutine 这是两个API,我们可以借助它们获取进程信息.具体看:http://msdn.microsoft.com/en-us/library/windows/hardware/ff559951(v=vs.85).aspx PsSetLoadImageNotifyRoutine 可以使用这

linux如何获取占用CPU最高的线程id?(java项目)

1.可以登上机器,确认下是什么线程使 CPU 飙高.先ps查看 Java 进程的 PID: ps -ef | grep  xx项目 2.拿到进程 pid 后,可以使用 top 命令,来看是什么线程占用了 CPU.top -p 12309 -H -p 用于指定进程,-H 用于获取每个线程的信息,从 top 输出的内容,可以看到有四个线程占用了非常高的 CPU: 到这里可以拿到12313.12312.12311.12314这四个线程id.为了确定这些是什么线程,需要使用 jstack 命令来查看这几

线程、线程ID获取

一.进程ID获取 1.1  当前进程的Id 方法1 通过进程名获取 Process[] processes = Process.GetProcesses(); foreach(Process process in processes) { if(process.ProcessName == "进程名" { MessageBox.Show(process.Id); } } 方法2 直接获取 Process processes = Process.GetCurrentProcess pro

CPU高获取其线程ID然后分析

以我们最近出现的一个实际故障为例,介绍怎么定位和解决这类问题. clip_image002 根据top命令,发现PID为28555的Java进程占用CPU高达200%,出现故障. 通过ps aux | grep PID命令,可以进一步确定是tomcat进程出现了问题.但是,怎么定位到具体线程或者代码呢? 首先显示线程列表: ps -mp pid -o THREAD,tid,time 找到了耗时最高的线程28802,占用CPU时间快两个小时了! 其次将需要的线程ID转换为16进制格式: print

Linux下获取线程TID的方法——gettid()

如何获取进程的PID(process ID)? 可以使用: #include <unistd.h> pid_t getpid(void); 通过查看头文件说明,可以得到更详细的信息: find /usr/include -name unistd.h /usr/include/asm/unistd.h /usr/include/bits/unistd.h /usr/include/linux/unistd.h /usr/include/sys/unistd.h /usr/include/unis

11.3 线程ID

正如每一个进程都有一个进程ID一样,每一个线程都有一个线程ID.与进程ID在系统内是唯一的不同,线程ID仅仅在其所属进程的上下文中有意义. 进程ID是使用数据类型pid_t来进行表示的,该类型是一个非负整数.线程ID使用pthread_t进行存储,实现可以使用一个结构来进行存储,所以可移植程序不能将他们当做整数对待,因此,对于线程ID的比较需要使用专门的函数实现: #include <pthread.h> int pthread_equal(pthread_t tid1, pthread_t