是否有一个很好的跨平台方法来确定机器在elisp中的处理器数量?我正在尝试让我的配置自动检测一些构建选项,并希望它自动使用处理器的数量+ 1. Grepping / proc / cpuinfo对我来说不是一个解决方案,因为它不适用于Windows。
答案 0 :(得分:9)
Emacs 24.3 Lisp无权访问该信息。您的选择似乎包括:
至少,四个小时前,当我第一次开始写这个答案时,这是真的。但后来我对这个问题感兴趣,现在你有了第三个选择:
(system-cores :physical)
以获取物理处理器的数量,(system-cores :logical)
以获取逻辑核心的数量,或者只是简单(system-cores)
来获得包含两者的列表。警告包括:
(getenv "PATH")
不包含/usr/sbin
,则PROCESS-LINES会弹出“搜索程序:没有这样的文件或目录,system_profiler”。)目前已知支持的系统是GNU / Linux(任何带有/ proc / cpuinfo的东西,或多或少),Windows NT(及其衍生产品,包括2000,XP和所有后续版本),以及Darwin (OS X,至少10.8,理论上可以追溯到10.2)。并非巧合,这些也是我可以访问的系统。
我还包括一个应该至少在某些BSD版本上正常工作的代理,但是我没有可以测试它的BSD框,所以不知道是否或者不是它真的有用 - 至少,你几乎肯定需要修改SYSTEM-CORES-SYSCTL代表检查的sysctl列表。
如果您正在使用各种现代Linux,Windows或OS X,那太好了!开箱即用你应该很好。如果没有,并且如果您的平台包含一个命令行实用程序,该实用程序在其结果中提供必要的信息,那么为您的系统编写委托应该不难。或者,如果您不想自己写代理,请给我发电子邮件:
M-: system-type
的输出M-: system-configuration
的输出我将能够自己编写代理并将其添加到库中。
修改::cores
和:processors
个关键字分别替换为:physical
和:logical
;我无法保持他们的直率,我也不明白为什么我也应该期待其他人。
编辑:根据@lunaryorn,将(split-string (shell-command-to-string ...))
替换为(process-lines ...)
。这样可以节省调用shell,这可能使库更可靠,并且当然使代码更容易阅读。