当前位置:  开发笔记 > 编程语言 > 正文

如何从C++中获取Linux 2.6中的SPID

如何解决《如何从C++中获取Linux2.6中的SPID》经验,为你挑选了1个好方法。

我有一个问题:从C++应用程序到linux 2.6中的SPID有什么办法吗?当我执行"ps -amT"时,我可以看到进程中的线程:

root@10.67.100.2:~# ps -amT
  PID  SPID TTY          TIME CMD
 1120     - pts/1    00:00:20 sncmdd
    -  1120 -        00:00:00 -
    -  1125 -        00:00:00 -
    -  1126 -        00:00:00 -
    -  1128 -        00:00:00 -
    -  1129 -        00:00:09 -
    -  1130 -        00:00:00 -
    -  1131 -        00:00:09 -
 1122     - pts/1    00:00:00 snstatusdemuxd
    -  1122 -        00:00:00 -
    -  1127 -        00:00:00 -
    -  1132 -        00:00:00 -
    -  1133 -        00:00:00 -

然后在文件系统中我可以看到线程:

root@10.67.100.2:~# ls /proc/1120/task/
1120  1125  1126  1128  1129  1130  1131

那么有什么方法可以从我的应用程序中获取SPID所以我可以以某种方式识别每个正在运行的线程中我的SPID是什么?

谢谢!

/麦克风

编辑:我应该补充一点,从getpid()返回的PID在每个线程中是相同的.

当我将此代码添加到我的线程时:

// Log thread information to syslog
syslog(LOG_NOTICE, "ibnhwsuperv: gettid()= %ld,  pthread_self()=%ld", (long int)syscall(224), pthread_self());

我得到这个结果:

Jan  1 01:24:13 10 ibnhwsupervd[1303]: ibnhwsuperv: gettid()= -1,  pthread_self()=839027488

它们都不像ps或proc文件系统中给出的SPID.

另请注意,gettid不会返回SPID.



1> jpalecek..:

如何gettid() ?

编辑:如果您的libc没有gettid()函数,您应该像这样运行它:

#include 
syscall(SYS_gettid);

...或参见本手册页上的示例.

推荐阅读
地之南_816
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有