- - PR -
RunTime#exec(String)で起動したネイティブコマンドがスリープする
1
| 投稿者 | 投稿内容 | ||||
|---|---|---|---|---|---|
|
投稿日時: 2003-07-07 15:09
はじめまして。
RunTime#exec(String)でネイティブコマンドを起動して Process#waitFor()で終了を待っていると ネイティブコマンドがスリープしていることがあります。 psコマンドでみるとネイティブコマンドがスリープしています。 いつも必ず発生するというわけではなく、発生しないときもあります。 ただ発生するコマンドの場合はいつも発生します。 コマンドの標準出力に出力するサイズが関係しているように思えます。 サンプルコード Process proc = RunTime.getRuntime().exec(cmd); proc.waitFor(); OS:RedHat Linux 7.3 JDK:1.4.03 どなたかスリープしないようにする方法をご存知のかたはいらしゃいませんでしょうか。 よろしくお願いします。 | ||||
|
投稿日時: 2003-07-07 20:03
その推測はおそらく当たりです。標準出力のバッファが一杯になってwriteが ブロックしてるんです。 別のスレッドから吸い出してやると良いかもしれません。 | ||||
|
投稿日時: 2003-07-08 08:38
回答ありがとうございます。
いろいろ試してみました。 以下のようにファイルにリダイレクトしても同じでした。 Process proc = RunTime.getRuntime().exec(cmd + " > debug.log"); proc.waitFor(); 以下のようにシェルプログラムを書いてcmdをシェルで実行しファイルにリダイレクトすると 期待通りに動作しました。 String shell = "test.csh"; Process proc = RunTime.getRuntime().exec(shell); proc.waitFor(); test.csh内でcmdをファイルにリダイレクトする。 これで対応はできるのですが、いろいろ試しているときに OS:Vine Linux 1.1 JDK:JDK1.1.7 の環境では一番最初のコードで動作しました。 > 標準出力のバッファが一杯になってwriteが > ブロックしてるんです。 という問題はJDKのバージョンアップにより発生したものなのでしょうか? | ||||
1
