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

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



  永井@シリウスです。

>>>>>> IKEDA Nozomu <ike@xxxxxxxxxxxxx> wrote:

> ・include されるファイルには、コマンドを先に記述してからユーザを
>  記述する。
> 
>  どうやらファイルの後ろから解釈されるようです。aliases は順番
>  通りの様子。ただ、これはソースの解析をおこなっていないので
>  常にそうなるかは検証していません。

  これについてもやってみてたんですが、どうも順序に対する依存性
はないみたいでした。include リストのどこに書いても、待たされる
みたいです。

> ・呼び出すコマンドの中で、時間がかかる処理の stdout を /dev/null や
>  ファイルなどに向けた上でバックグラウンドで走らせる。

  これもやってみましたが、変わらないようでした。これは、たとえば

----ここから----
#!/bin/sh

sleep 20 > /dev/null &
----ここまで----

とかいうスクリプトを実行してみる、ということですよね?このスク
リプトを include の中から実行するようにしてみましたが、やはり 
sleep 20 が終了するまで待たされます。その時の ps auxw の表示結
果では、スクリプト名を command.sh とすると、

nobody    5186  0.5  0.0     0    0 ?        Z    03:13   0:00 [command.sh <defunct>]

のようになってました。

  ちなみに状況の回避そのものについては、[postfix-jp:02023] で
書いたような方法(.forward を利用する)で回避してはいます。が、
この性質が postfix の本質的なもの(実装依存ぽい気も若干…)な
のか、それともなにか制御できうるものなのかが気になっています。
(だいたい、バックグラウンドで実行してるのに defunct なまま待
たれてるってのが、どうにも理由がよくわからなくて…)

  あと、ちょっとよくわからなかったんですが、池田さんのおっしゃ
る、

>  コマンドをバックグラウンドで走らせても、stdout が残っていると
>  結果としてコマンドの終了を待ってしまうことになります。 

というのは、どういう仕組みあるいは仕様によるものなんでしょうか?
また、『stdoutが残っている』というのは、どういう状態をさすので
しょうか?

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

----
Toyohiko Nagai.

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

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