Gauche:MIPS-SGI-IRIX

Gauche:MIPS-SGI-IRIX

run-process の挙動

hello.scm:

 #!/usr/bin/env gosh
 (print "Hello, Gauche!")

hello.pl:

 #!/usr/bin/env perl
 print "Hello, Perl!\n";

process.scm:

 (use gauche.process)
 (let ((gosh (run-process "./hello.scm" ))
       (perl (run-process "./hello.pl" )))
   (process-wait perl)
   (process-wait gosh) )

として、

 gosh process.scm

とやると、Linux (RH9,Pentium4) では、

 Hello, Perl!
 Hello, Gauche!

と表示される。一方 SGI のマシン (IRIX6.5,R12000) では、

 Hello, Perl!

となり、なぜか、"Hello, Gauche!"が来ない、、、 一般に、Gauche スクリプトを Gauche スクリプトから呼び出すと SGI のマシンでは実行されないようだ。僕のマシンだけ?? configure がおかしかったのかしら。KINJO

 gosh> (sys-system "./hello.scm")
 9
 gosh> (run-process "gosh" "./hello.scm")
 #<process 197178 "gosh" active>
 gosh> (run-process "/usr1/people/akinjo/tmp/hello.scm")
 #<process 197604 "/usr1/people/akinjo/tmp/hello.scm" active>
 gosh> (sys-system "/usr1/people/akinjo/tmp/hello.scm")
 9

となり、やはり、"Hello, Gauche!" はプリントされません。"9"が帰るってことは kill されてる? ちなみに perl スクリプトを 走らせるとこうなりました:

 gosh> (sys-system "./hello.pl")
 Hello, Perl!
 0
 gosh> (run-process "perl" "./hello.pl")
 Hello, Perl!
 #<process 197363 "perl" active>

蛇足ですが、シェルから ./hello.scm した場合はちゃんと動いています。

 shell$ gdb /usr/local/bin/gosh
 GNU gdb 6.1 ....
 (gdb) run
 Starting program: /usr/local/bin/gosh
  
 Program received signal SIGSEGV, Segmentation fault.
 0x5ffb3c40 in GC_find_limit (p=0x7fff25c0 "", up=1) at os_dep.c:806
 806                     GC_noop1((word)(*result));
 (gdb) print result
 $1 = 0x7fff8000 <Address 0x7fff8000 out of bounds>
 (gdb)

おやまあ、、、Gauche-0.7.4.2/gc/os_dep.c ということで、犯人は判明しました。 (直し方は知らないけど) Boehm GC がサポートしてない環境なのかなぁ。 それにしても、ふだんは gosh が使えているのが不思議です。

 shell$ cd Gauche-0.7.4.2/gc ; cat gc_hoge.c  
 #include <stdlib.h>
 #include <stdio.h>
 #include <string.h>
  
 #include "gc.h"
  
 int
 main(int argc, char *argv[])
 {
   char *x,*a;
   int n,sig=0;
    
   a = (argc > 1) ? strdup(argv[1]) : strdup("hoge?");
   n = strlen(a);
  
   x = (char*) GC_malloc_atomic((n+1)*sizeof(char));
   strcpy(x,a);
   printf("%s\n", x);
   fflush(stdout);
  
   sig = system("./hoge.out inside");
   printf("hoge.out returned: %d\n", sig);
   fflush(stdout);
                                                                                
   return 0;
 }
  
 shell$ gcc -I./include gc_hoge.c .libs/libgc.a -o hoge.out
 shell$ ./hoge.out "keke?"
 keke?
 hoge.out returned: 9
 shell$

てな具合です。ちなみに Linux PC の方では、

 shell$ ./hoge.out "keke?"
 keke?
 inside
 inside 
 ...
 (途中で Ctrl-C する)
 hoge.out returned: 2
 hoge.out returned: 0
 hoge.out returned: 0
 ...

となります。なお、strcpy(x,a) がなくても同様の結果になります。

 shell$ ./hoge.out "keke?"
 keke?
 inside
 inside 
 ...
 (途中で Ctrl-C する)
 hoge.out returned: -1
 hoge.out returned: 0
 hoge.out returned: 0
 ...

となって、Ctrl-C したときに 2 ではなく -1 が返って来るのが気になります。とおもったら、Ctrl-C してないのに、しばらくすると(263回目の "inside" が表示されたあと) 勝手に終了していました。(これは単にメモリが少ないせいか? 256MB しかないので。)


Last modified : 2012/02/07 08:54:04 UTC