Hi, all:
    The harmony Runtime.exec fails on Linux with ENOMEM.
    Here is the testcase:

public class Exec {
   public static void main(String[] args) throws Exception {

      Runtime.getRuntime().exec("ls");    }
}

   I have tried it on RedHat Enterprise 4 and Unbuntu, both get ENOMEM in
native code.

   After digging into it, I found it fails in procimpl.c, line 135:

       grdpid = fork ();

   If the call to fork is changed to vfork, the testcase will pass but
still get exitcode = 1 which indicates that some error has happened. The
difference between fork and vfork is just whether page tables is copied to
child process or not. But I do not think it is the main cause. Besides,
vfork has become outdated since it main usage is supplied by fork with
copy-on-write function implemented in modern linux kernel. Furthermore,
vfork is also not so safe as fork. So I do not think it is the accepted way
to solve the problem.

  I will try whether it can be reproduced on drlvm of linux since I am not
sure whether it is relevent to VM or classlib. If any drlvm man can tell me
the result, it can avoid my trouble to build it on linux. :)







--
Leo Li
China Software Development Lab, IBM

Reply via email to