[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[freewnn:00266] Re: return value and other
- To: freewnn@tomo.tomo.gr.jp
- Subject: [freewnn:00266] Re: return value and other
- From: sin@XXXX (MOTOKI Sinichi)
- Date: 14 Jan 2000 15:10:05 +0900
- In-Reply-To: <20000114140133.Postino-010397@smtp01.highway.ne.jp>(Kaoru Fukui's message of "14 Jan 2000 14:16:39 +0900")
- References: <20000114140133.Postino-010397@smtp01.highway.ne.jp>
- Reply-To: freewnn@tomo.gr.jp
- Sender: sin@XXXX
- User-Agent: T-gnus/6.13.3 (based on Pterodactyl Gnus v0.98) WEMI/1.13.7(島田) FLIM/1.13.2(笠縫) Emacs/20.5 (i386-debian-linux-gnu)MULE/4.1 (葵)
元木です。
In [freewnn : No.00264]
Kaoru Fukui <k_fukui@highway.ne.jp> wrote:
| jserver,cserver,tserver,kserver 総てのserverの戻り値が
| 設定されていませんので
| int main(){ return 0;} のreturn 0;に当たる記述がde.cに
| 見当たりません。
Xsi/Wnn/jserver/de.c の 229行目あたりの _exit がそれに当たります。
> if (fork()) {
> signal(SIGCHLD , _exit);
> signal(SIGHUP , SIG_IGN);
> signal(SIGINT , SIG_IGN);
> signal(SIGQUIT, SIG_IGN);
>#ifdef SIGTSTP
> signal(SIGTSTP, SIG_IGN);
>#endif
> signal(SIGTERM, _exit); <---- これ
> pause();
> }
で、その下の 265行目あたりで SIGTERM を送って親プロセスを
kill しています。
>#ifndef NOTFORK
> /* End of initialization, kill parent */
> kill(getppid(), SIGTERM); <---- これ
> fclose(stdin);
> fclose(stdout);
# glibc での話です。違う実装もあるかも。
そのため SIGTERM のシグナルハンドラーたる _exit は、SIGTERM
を引数として _exit (SIGTERM) と呼ばれます。
そうすると Linux では SIGTERM == 15 ですので tserver からの
戻り値は 15 になります。
というわけで、
| [ $? = 15 -o $? = 0 ] && echo_success || echo_failue
となっているのだと思います。
本当は、いきなり _exit をシグナルハンドラーにするのではなく
一枚関数をかまして処理すべきだと思います。
正常終了なのに 15 が返るなんてのは気分が悪い :-)
| それにtserverの起動終了はcwnnkillではダメなのでしょうか?
むう。やっぱりわかりにくいですかね ^^;
"cwnnkill -L zh_TW" で大丈夫なはずです。
# -DTAIWANESE をつけて cwnnkill をコンパイルしなおして
# twnnkill とかにしてもいいかも知れない。
sin.