[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[postfix-jp:02030] Re: local配送時の処理(alias展開とか)並列性



  永井@シリウスです。

>>>>>> YOSHIMURA Keitaro <ramsy@xxxxxxxx> wrote:

  どうもです。

> >   ちなみに、上記のスクリプトをプログラムに置き換えてもだめでし
> > た。たとえば実行直後に stdout をfclose して、stdout を
> > fopen("/dev/null", "w" ) と差し換え、すかさず fork ->
> > exec(sleep 20)する、とかいうのも試してみましたが、状況は変わり
> > ませんでした。
> 
> outだけじゃ足らないです。std{in,out,err} 全部閉じる必要があります。

  ありがとうございます。それでした。stderrまで閉じる必要がある
ようです。stdin のほうは必要ないようです。私も池田さんのご指摘
があったときに、せめて stderr ぐらいは試すべきでした。申し訳な
いです > 池田さん

> あと、setsid(8) しましたか?
> forkだけでは不十分で、縁切りしないとダメだと思います。

  このプログラムはお初にお目にかかります。こういう便利なものが
あるんですか。勉強になりました。

  shell script でやる場合については、

#!/bin/sh
exec setsid 時間のかかるコマンド 引数... >/dev/null 2>&1

というのを用意すれば良さそうです。(もちろんexecの後は実行され
ないんで、前後になにか必要処理ある場合はそれなりに細工すること
になるとは思います)

  あと、postfix のこのような動作の理由に関しては、ソースを見て
なんとなく納得しました。この理由でいいのかどうかわかりませんけ
ど、waitpid 使ってるんですね。実際に -1 で waitpid していると
ころもあるみたいなんで、そういうことなんですかね。
(spawn_command.c とかが今回のと直接関係あるのかもしれませんが、
pid に最終的に何を設定しているかの判定までは、面倒になったので
みてません)


  ようやく気になってたものがクリアーになったような気がします。
今やっているへんてこりんな逃げ方も捨てることができそうです。

  池田さん、吉村さん、どうもありがとうございました。

----
Toyohiko Nagai.

References
[postfix-jp:02027] Re: local配送時の処理(alias展開とか)並列性, IKEDA Nozomu
[postfix-jp:02028] Re: local配送時の処理(alias展開とか)並列性, Toyohiko Nagai
[postfix-jp:02029] Re: local配送時の処理(alias展開とか)並列性, YOSHIMURA Keitaro

[検索ページ] [Postfix-JP ML Home]