2

古い 32 ビット バージョンの SGE execd を実行する 64 ビットの Debian Squeeze システムを使用しています。コマンドラインで実行するuname -mと、期待どおりの結果が得られます: x86_64. しかしuname -m、同じホストの SGE スクリプト内で実行すると、出力はi686. これにより、 からの正しい読み取りに依存するものはすべて壊れますuname -m

私は問題を回避できるので、私の質問は実用的というよりも学術的です。uname のソース コードをダウンロードしましたが、マシン アーキテクチャ データのプル元がどこにあるのかわかりませんでした。uname -mが 64 ビットの親プロセスではなく 32 ビットの親プロセスで実行されているため、この問題が発生していると思います。だから私の質問は - その仮定は正しいですか? もしそうなら、なぜ uname はそれを実行するプロセスのアーキテクチャに影響されるのですか?

4

1 に答える 1

3

uname -mpersonality(2)コードを実行している「仮想マシン」のレポートに使用されます。カーネルはさまざまなパーソナリティを持つコードを実行できるため (たとえば、64 ビット マシンで 32 ビット コードを実行し、32 ビット アドレス空間のみ、または短い i ノード、異なるシグナル番号、または同様の制約で完全なコードを実行できるため)、プログラムはの出力を使用して、uname -m実行方法を決定します。つまり、実行時にどのカーネル インターフェイスを取得するかを決定します。

したがって、ハードウェアの全範囲ではなく、個性uname -mを反映することが重要です。

おそらく、コマンドおよび後続のヘルパー プログラムの前に、ソフトウェアへの、setarch(8)またはソフトウェアへの呼び出しを挿入できます。personality(2)fork(2) exec()uname -m

于 2011-05-21T22:10:22.580 に答える