<< NetBeansのメモリプロファイラ | Home | テンペストを更新。 >>
PR: 転職    お墓    エコ    通販    結婚相談所    シルバー    質屋    葬式    漫画    エステサロン   

Groovyで子プロセス起動

gantのソース見ていて気付いたわけだけど、文字列配列とか、文字列に対して、execute()を実行すれば良いようだ。Groovy JDKにも載っているね。Groovy JDKではString[]というのが、1つのエントリになっているのか。

gantのソースを元に作成すると、こんな感じになるんだけど、

def process = ['ls', '-l', '/etc'].execute()
//def process = 'ls -l /etc'.execute()
process.err.eachLine {println it}
process.in.eachLine {System.err.println it}
def ret = process.waitFor()

確かに、これはLinuxだと、一見問題無く動く。でもWindowsだとハングする。これってストリームが詰まる問題だよね。Linuxはストリームのバッファが、かなり大きいようで問題が顕在化しないだけじゃないかな。

Thread.start {
    process.err.eachLine {println it}
}

とすれば良さそうだ。簡単に書けていいんだけどさ、クロージャ経由って、Javaメモリモデルの問題とか、どうなるんだか、さっぱり見えないから。なんか怖い。




コメント追加 トラックバック送信
このサイトの掲載内容は私自身の見解であり、必ずしもIBMの立場、戦略、意見を代表するものではありません。
日本アイ・ビー・エム 花井 志生 Since 1997.6.8