是否有一个很好的跨平台方法来确定机器在elisp中的处理器数量?我正在尝试让我的配置自动检测一些构建选项,并希望它自动使用处理器的数量+ 1. Grepping/proc/cpuinfo对我来说不是一个解决方案,因为它不适用于Windows.
Aar*_*ler 10
Emacs 24.3 Lisp无权访问该信息.您的选择似乎包括:
至少,四个小时前,当我第一次开始写这个答案时,这是真的.但后来我对这个问题感兴趣,现在你有了第三个选择:
(system-cores :physical)获取物理处理器(system-cores :logical)的数量,获取逻辑核心的数量,或者只是(system-cores)为了获得包含两者的alist.注意事项包括:
(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-typeEmacs 的输出M-: system-configurationEmacs 的输出我将能够自己编写代理并将其添加到库中.
编辑::cores和:processors关键字分别替换为:physical和:logical; 我无法保持他们的直率,我也不明白为什么我也应该期待其他人.
编辑:每个@lunaryorn,替换 (split-string (shell-command-to-string ...))为(process-lines ...).这样可以节省调用shell,这可能会使库更可靠,并且肯定会使代码更易于阅读.