質問

していま継承した一部のコード:

Process p = new ProcessBuilder("/bin/chmod", "777", path).start();
p.waitFor();

基本的には、一部の古代高強に基づく理由の保存キーと値のペアディスクにファイルが含まれています。んですが、行きたいです。

しかし、私は残っIO例外:

Exception :Cannot run program "/bin/chmod": java.io.IOException: error=24, Too many open files
Message: Cannot run program "/bin/chmod": java.io.IOException: error=24, Too many open files

とろんの領域で10k-百万

もののwaitFor呼び出しを停止しこれらの発生の過程を修了することができ、出口戻したいと思いchmodが返す結果前ファイルは閉じられます。なんだろうけど、日本人の場合この原因はこれらの例外?

私はその他の傾向の開閉のファイルが起こりません迅速に、java終わることだが、そのようなものがあるとの形式のファイルのバッファーとなクリア時fwまでclose()が呼び出されます。

い新しいjava、この地獄かというのは私stumped.(喜んでこのアプリがなんだか..後吐きの時に書き出して非常に大きいログファイル)

で誰も考えをわかりやすく伝えるための周辺のこのリバッファを増やファイルを開くに制限はないのjvmを維持することが可能とな自身が前提となる問題)

役に立ちましたか?

解決

私はあなたがループ内でこれらのchmodコマンドを実行していると推定 - あなたは非常に多くの例外を取得したい、なぜそう私は表示されません。それはあなたが生成されたプロセスの出力を読んでいないので、あなたがデッドロックを打っていることが可能です。それは確かに前ProcessBuilderRuntime.exec()日に私をバックかむために使用される。

上記のパターンにあなたのコードスニペットを変更します:

try {
    ProcessBuilder pb = new ProcessBuilder("/bin/chmod", "777", path);    
    pb.redirectErrorStream(true); // merge stdout, stderr of process

    Process p = pb.start();
    InputStreamReader isr = new  InputStreamReader(p.getInputStream());
    BufferedReader br = new BufferedReader(isr);

    String lineRead;
    while ((lineRead = br.readLine()) != null) {
        // swallow the line, or print it out - System.out.println(lineRead);
    }

    int rc = p.waitFor();
    // TODO error handling for non-zero rc
}
catch (IOException e) {
    e.printStackTrace(); // or log it, or otherwise handle it
}
catch (InterruptedException ie) {
    ie.printStackTrace(); // or log it, or otherwise handle it
} 

(クレジット:のrel="noreferrer">)、それは状況に役立ちますかどうかを確認

他のヒント

プロセスが実際にファイルを閉じることなく完了だろうとは考えにくいです。これは、スレッドの非常に大きな#で何が起こっていませんか?それともそれらのいくつかは、実際に(すなわち、それはいくつかのケースでのwaitForでぶら下がっている)を完了していない?

そうでなければ、私はあなたが開いているファイルの制限の増加に伴って立ち往生することになると思います。これはUnixライクなシステムであると仮定すると、「ulimitの」コマンドは、あなたが探しているものと考えられます。

使用している場合は、JAVA6,きものセッター(読み書き実行)のファイルオブジェクトです。が遅くなることができます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top