2

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

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

4

1 回答 1

3

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

所以重要的是uname -m体现个性,而不是硬件的全貌。

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

于 2011-05-21T22:10:22.580 回答