2012-02-20 61 views
3

我正在编写一个程序,需要知道它在哪个逻辑处理器上运行。如何在Linux中获得C语言中当前进程的处理器ID?

This question告诉我该怎么做组装,而this question告诉我如何使用组装此代码,而无需将其转换成AT & T语法。

使用现有的Linux系统调用或库函数是否有更简单的方法来做到这一点,还是我需要重新发明轮子?

+2

你可以得到这些信息,但我不知道这些信息将有多长好您可以随时将该流程重新安排在另一个核心上运行。 – 2012-02-20 09:25:28

+0

您提到的问题不会做你想做的事。它告诉你有多少CPU,而不是你正在运行哪个CPU。 – ugoren 2012-02-20 09:54:02

+0

@ugoren:你是对的......我误读了它 – 2012-02-21 21:29:14

回答

7

这里有linux专用getcpu call

+3

请注意,它会在通话时为您提供cpu。下一条指令,你的线程可能在另一个CPU上。 – ugoren 2012-02-20 09:52:47

+2

@ugoren当然! :)除非使用'sched_setaffinity' http://linux.die.net/man/2/sched_setaffinity – abyx 2012-02-20 11:12:09

+0

请注意'getcpu'可以通过vdso在用户空间(而不是系统调用)中实现,所以它可能比你会期待的。 – 2012-02-20 15:56:18

-1

试试这个,我不知道你要的是这个

#include<stdio.h> 
#include<sys/utsname.h> 

int main() 
{ 

char hostname[1024]; 
struct utsname userinfo; 
if(uname(&userinfo)>=0) 
{ 
    printf("\n***** System Details ******\n"); 
    printf("System Name : %s\n",userinfo.sysname); 
    printf("System Node : %s\n",userinfo.nodename); 
    printf("System Release : %s\n",userinfo.release); 
    printf("System Version : %s\n",userinfo.version); 
    printf("System Machine : %s\n",userinfo.machine); 
} 
else 
printf("\nSystem details fetch failed..\n"); 



if(gethostname(&hostname,1024)==0) 
{ 
    printf("Hostname : %s\n",hostname); 
} 
else 
printf("\nHostname details fetch failed..\n"); 

return 0; 
} 
+1

这会给我机器的IP。我正在寻找我的进程正在运行的CPU中的核心ID。 – 2012-02-20 20:53:36

+0

有什么方法可以获取CPU ID或其他类型的硬件地址吗?特别适用于iPhone? – karim 2013-05-03 09:29:40