linux - 确切地说,为什么 uname -m 在 Sun Grid Engine (SGE) 运行时会报告错误的体系结构?

标签 linux architecture debian sungridengine uname

我有 64 位 Debian Squeeze 系统,运行旧版 32 位版本的 SGE execd。当我在命令行运行 uname -m 时,我得到了我所期望的结果:x86_64。但是,当我在同一主机上的 SGE 脚本内运行 uname -m 时,输出为 i686。这会破坏任何依赖于 uname -m 正确读取的内容。

我可以解决这个问题,所以我的问题更多是学术性的而不是实际性的。我下载了 uname 源代码,但找不到它从哪里提取机器架构数据。我认为出现此问题是因为 uname -m 是由 32 位父进程而不是 64 位父进程运行的。所以我的问题是 - 这个假设是否正确,如果是,为什么 uname 会受到执行它的进程的体系结构的影响?

最佳答案

uname -m用于报告personality(2)运行代码的“虚拟机”。因为内核可以运行具有不同特性的代码(例如,64 位机器上的 32 位代码,“仅”具有 32 位地址空间,或短 inode,不同的信号号或类似的约束),程序可能使用 uname -m 的输出确定它们应该如何运行——即它们在运行时将获得哪些内核接口(interface)。

因此重要的是uname -m反射(reflect)个性,而不是硬件的全部范围。

也许您可以插入对 setarch(8) 的调用或personality(2)fork(2) 之前进入您的软件exec()您的uname -m命令和后续帮助程序。

关于linux - 确切地说,为什么 uname -m 在 Sun Grid Engine (SGE) 运行时会报告错误的体系结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6084611/

相关文章:

sql - 如何将索引与数据分开存储在Azure上?

c# - 软件架构设计: Number of classes

python - Raspbian-Python3.9 : ImportError: The _imagingft C module is not installed

mod-rewrite - mod_rewrite 不起作用

linux - rsync 设置错误组

javascript - Node JS Loopback 模型用例

linux - 如何将默认文档根目录 (www) 和 cgi-bin 更改为主目录?

c++ - 为 C++ 源文件构建 debian 包时出错

linux - 在 Linux 中为 Adob​​e Air 应用程序设置自定义菜单文件夹

linux - sh startup.sh 使用 puppet 模块启动 tomcat