2012-02-20 58 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