ここにいくつかのRubyコードがあります:
puts %x{ pstree #{$$} } # never forks
puts %x{ pstree '#{$$}' } # forks on amd64 only
32 ビットの Ubuntu Dapper では、次の出力が得られます。
t.rb---pstree
t.rb---pstree
それは私には理にかなっています。しかし、64 ビットの Ubuntu Hardy では、次のようになります。
t.rb---sh---pstree
t.rb---pstree
ここで示されているのは、Ruby が exec の前に fork するケースが 1 つだけあるということです。コードをファイルに入れて strace -fF で実行すると、64 ビットの Hardy ではclone()
(like のようにfork()
) beforeを呼び出しているように見えますがexecve()
、32 ビットの Dapper ではそのようなことはしません。
私のRubyバージョンは次のとおりです。
ruby 1.8.4 (2005-12-24) [i486-linux]
ruby 1.8.6 (2007-09-24 patchlevel 111) [x86_64-linux]
インタープリターと OS とワード サイズをもっと組み合わせて調整する必要がありますが、これらのマシンを管理していないので、現時点では簡単ではありません。32 ビット システムで同じように動作する理由は言うまでもなく、64 ビット システムでのこれらのコマンドの違いさえ何かを教えてくれる人がいるかもしれません。