【问题标题】:how can I get the processor ID of the current process in C in Linux? [duplicate]如何在 Linux 中获取 C 中当前进程的处理器 ID? [复制]
【发布时间】:2012-03-10 15:34:41
【问题描述】:

我正在编写一个程序,它需要知道它在哪个逻辑处理器上运行。

This question 告诉我如何在汇编中执行此操作,而this question 告诉我如何在汇编中使用此代码而不将其转换为 AT&T 语法。

有没有更简单的方法可以使用现有的 Linux 系统调用或库函数来做到这一点,或者我有必要重新发明轮子吗?

【问题讨论】:

  • 您可以获得该信息,但我不确定该信息会持续多久,因为您可以轻松地重新安排该过程并随时在另一个核心上运行。
  • 你提到的问题没有做你想要的。它告诉你有多少 CPU,而不是你在哪个 CPU 上运行。
  • @ugoren:你说得对……我看错了
  • @HosseinBobarshad:那完全是另一回事。我的问题是关于运行线程的逻辑处理器的逻辑处理器 ID,而您指出我的问题是关于处理器的型号,也许还有它的序列号。

标签: c linux


【解决方案1】:

这里有特定于 linux 的 getcpu call

【讨论】:

  • 请注意,它会在调用时为您提供 cpu。下一条指令,你的线程可能在另一个 CPU 上。
  • @ugoren 当然! :) 除非有人使用sched_setaffinity linux.die.net/man/2/sched_setaffinity
  • 请注意,getcpu 可以通过 vdso 在用户空间(而不是系统调用)中实现,因此它可能比您预期的要便宜。
  • 而 glibc 对此有包装器,称为 sched_getcpu: stackoverflow.com/a/10256090/895245
【解决方案2】:

你可以看到sched_getcpu()。这个 glibc C 函数调用了getcpu Linux 系统调用。

【讨论】:

【解决方案3】:

试试这个,我不确定你想要的是这个

#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;
}

【讨论】:

  • 这会给我机器的IP。我正在寻找我的进程正在运行的 CPU 中的核心 ID。
  • 有没有办法获取 CPU ID 或其他类型的硬件地址? iPhone 专用?
猜你喜欢
  • 2020-06-03
  • 2013-12-17
  • 1970-01-01
  • 1970-01-01
  • 2015-02-10
  • 1970-01-01
  • 2012-03-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多