2011年2月11日

[ruby-list:47865] system関数について

はじめまして、鈴木と申します。

バッチをrubyで実装しています。
子プロセスを起動し、終了を待つもので
system関数で子プロセスの起動・終了待ちを行っています。
また、子プロセス(シェル)においても孫プロセス(シェル)の起動・終了待ちを行っています。

稀に子プロセスが終了したにもかかわらず

system関数より制御が戻らなくなりハングした状態になります。
この事象が発生したとき子プロセスがdefunctになっています。
ただし、子プロセスのアプリログでは正常終了を出力しています。
ゾンビ(defunct)についてあまり詳しくないので少し調べると
「親プロセスが子プロセスのSIGCHLDシグナルをうけとっていない」
とあり、親側の呼び出し方、待ち方の問題も否定できず
この後、どう進めていくか方向性が見つられずにいます。
・ソースを解析→system関数の実装確認
・system関数ではなく他の関数(fork、spawn)に組み替える。
 →根本原因がわからないままだと、

同様の現象を遭遇された方、お気づきのことがあれば
調べ方をご指摘をいただけないでしょうか。

<バージョン>
1.8.5

<子プロセス起動のソースの抜粋>
def sync()
cl='su - xxxx -c "/xxxx/test.sh"'
r=system(cl)
return r
end

<子プロセスの実装について>
ruby⇒シェル(子)⇒シェル(孫)

投稿者 xml-rpc : 2011年2月11日 15:08
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/101944
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。