2007年5月30日水曜日

バックグラウンドでコマンド実行

railsに限らず、バックグラウンドでコマンドを実行し、その結果を受け取るようなWebプログラムはよくあると思います。

perlやphpではsystem関数を利用してコマンド実行を行いますが、rubyではopenを使用します。

今回はバックグラウンドであるディレクトリのファイルの一覧をLinuxのコマンド"ls"で取得するためのプログラムの実装例です。

---------------
list = open('|ls /home/hogehoge/') {|msg| msg.gets}

if list.nil?
message = 'ディレクトリは空です'
else
message = 'ディレクトリの内容を表示します。' + list
end

p list
---------------
注意しなくてはいけないのがopenする際に、ブロックを与えないとバックグラウンドで実行したプロセスへのpipeがクローズされないまま、ゾンビになってしまうのです。
つまり、今回の例であれば"ls /home/hogehoge"のプロセスがゾンビ状態となってしまうのです。

SevenAgent,Inc

1 件のコメント:

匿名 さんのコメント...

...please where can I buy a unicorn?