2011-05-31 46 views
0

返回不同的結果爲什麼'ulimit -a'通過Runtime.exec()以不同的方式返回,直接在bash下運行它,感謝任何指針。爲什麼ulimit通過java Runtime.exec()

的Java: 打開文件(-n)65536

的bash-3.00 $的ulimit -a: 打開文件(N)256

public class TestUlimit { 
    public TestUlimit() throws IOException, InterruptedException { 
      Runtime runTime = Runtime.getRuntime(); 
      Process p = runTime.exec(new String[] { "bash", "-c", "ulimit -a" }); 
      InputStream in = p.getInputStream(); 
      InputStreamReader isr = new InputStreamReader(in); 
      BufferedReader br = new BufferedReader(isr); 
      String line = null; 
      System.out.println("Result of Process p = runTime.exec(new String[]  { \"bash\", \"-c\", \"ulimit -a\" });"); 
      while ((line = br.readLine()) != null) { 
        System.out.println(line); 
      } 
      p.waitFor(); 

      p = runTime.exec("ulimit -a"); 
      in = p.getInputStream(); 
      isr = new InputStreamReader(in); 
      br = new BufferedReader(isr); 
      System.out.println("Result of p = runTime.exec(\"ulimit -a\");"); 
      while ((line = br.readLine()) != null) { 
        System.out.println(line); 
      } 
      p.waitFor(); 
    } 
+0

幾乎不是Java的問題。 – EJP 2011-05-31 03:02:39

+0

將絕對路徑添加到ulimit以確保您正在執行正確的路徑,例如/ bin/uname – 2011-05-31 07:55:57

回答

0

慶典執行它自己的ulimit命令?檢查.profile,.bashrc等。

+1

或企業級系統/ etc/profile,可能是/var/etc/profile.local。祝你好運。 – shellter 2011-05-31 04:21:38

0

ulimit是一個shell內置函數,其默認值基於shell的配置。 Java可能使用除bash以外的默認shell。即使情況並非如此,也可能是您有一些設置,例如.profile,當您有命令行時調用該設置,但在編程運行shell時不會。

+0

Java不會通過shell執行,除非你告訴它,所以必須有一個ulimit程序。 – EJP 2011-05-31 04:55:28

+0

哦。我沒有意識到這一點。 – Dan 2011-05-31 13:52:20

+0

我的機器上沒有ulimit程序。 – 2011-06-13 12:34:44