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

[freewnn:00342] Re: return value and other




古川竜雄です。

jserver の終了コードの話です。

福井さん> 設定されていませんので
福井さん> int main(){ return 0;} のreturn 0;に当たる記述がde.cに
福井さん> 見当たりません。

元木さん>  Xsi/Wnn/jserver/de.c の 229行目あたりの _exit がそれに当たります。

元木さん>  で、その下の 265行目あたりで SIGTERM を送って親プロセスを 
元木さん>  kill しています。

元木さん>  そのため SIGTERM のシグナルハンドラーたる _exit は、SIGTERM 
元木さん>  を引数として _exit (SIGTERM) と呼ばれます。

元木さん>  そうすると Linux では SIGTERM == 15 ですので tserver からの
元木さん>  戻り値は 15 になります。

元木さん>  本当は、いきなり _exit をシグナルハンドラーにするのではなく
元木さん>  一枚関数をかまして処理すべきだと思います。

これ、具体的にどうしたらいいのでしょう?

要するに

    signal(SIGTERM, _exit);
                      ↓
                    handler

と書き換えて、handler では、

    原因が SIGTERM だったら _exit(0);
    それ以外 _exit(シグナルの値)

という感じにしておけばいいのでしょうか?


元木さん>  正常終了なのに 15 が返るなんてのは気分が悪い :-)

やっぱ、正常終了は 0 ですよね。:-)

-- 
古川竜雄 (frkwtto@osk3.3web.ne.jp) / FreeWnn Project