我有 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/