かとんぼです。

 ruby 1.8.2 (2004-07-18) [i386-mswin32] で、$?.pid が 0 になりま
す。

|C:\TMP>ruby -ve "p system(%(ruby -e 'p $$;exit(3)')); p $?"
|ruby 1.8.2 (2004-07-18) [i386-mswin32]
|3452
|false
|#<Process::Status: pid=0,exited(3)>

|C:\TMP>ruby -ve "p system(%(ruby -e 'p $$;exit(3)')); p $?"
|ruby 1.9.0 (2004-07-18) [i386-mswin32]
|2900
|false
|#<Process::Status: pid=2900,exited(3)>

 rb_waitpid() で、正しくlast_status_set() できているのを、
rb_f_system() の終わりで last_status_set(status, 0) しているため
でした。

Index: process.c
===================================================================
RCS file: /src/ruby/process.c,v
retrieving revision 1.92.2.6
diff -u -r1.92.2.6 process.c
--- process.c	15 Apr 2004 15:02:12 -0000	1.92.2.6
+++ process.c	21 Jul 2004 13:09:45 -0000
@@ -1427,9 +1427,7 @@
     else {
 	status = proc_spawn_n(argc, argv, prog);
     }
-#if defined(_WIN32)
-    last_status_set(status, 0);
-#else
+#if !defined(_WIN32)
     last_status_set(status == -1 ? 127 : status, 0);
 #endif
 #elif defined(__VMS)

-- 
北島雅博(かとんぼ)