Почему именно uname -m сообщает о неверной архитектуре при запуске от Sun Grid Engine (SGE)? - PullRequest
2 голосов
/ 22 мая 2011

У меня есть 64-битные системы Debian Squeeze, на которых установлена ​​более старая 32-битная версия SGE execd.Когда я запускаю uname -m в командной строке, я получаю то, что ожидал: x86_64.Но когда я запускаю uname -m внутри сценария SGE на том же хосте, вывод будет i686.Это нарушает все, что зависит от правильного прочтения uname -m.

. Я могу обойти эту проблему, поэтому мой вопрос скорее академический, чем практический.Я загрузил исходный код uname, но не смог найти, откуда он берет данные об архитектуре машины.Я предполагаю, что эта проблема возникает из-за того, что uname -m запускается 32-битным родительским процессом вместо 64-битного родительского процесса.Поэтому мой вопрос - верно ли это предположение, и если да, то почему на uname влияет архитектура процесса, который его выполняет?

1 Ответ

3 голосов
/ 22 мая 2011

uname -m используется для сообщения personality(2) о «виртуальной машине», на которой выполняется код. Поскольку ядро ​​может запускать код с разными личностями (скажем, 32-разрядный код на 64-разрядной машине, в комплекте с «только» 32-разрядным адресным пространством или короткими индексами, различными номерами сигналов или аналогичными ограничениями), программы могут используйте вывод uname -m, чтобы определить, как они должны работать - т.е. какие интерфейсы ядра они получат во время выполнения.

Поэтому важно, чтобы uname -m отражало индивидуальность , а не всю аппаратную часть.

Возможно, вы можете вставить вызов setarch(8) или personality(2) в свое программное обеспечение до fork(2) exec() вашей команды uname -m и последующих вспомогательных программ.

...