[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[debian-devel:11512] Re: jfbterm
佐野@浜松です。
「終了時に凍る」問題と直接には関係無いみたいですが (一応やってみた)
jfbterm の term.c にある
void sigchld(sig) int sig; {
int st;
int ret;
ret = wait(&st);
if (ret == gChildProcessId || ret == ECHILD) {
tvterm_unregister_signal();
tterm_final(&gTerm);
exit(EXIT_SUCCESS);
}
signal(SIGCHLD, sigchld);
}
って正しいですか ? man 2 wait すると
返り値
終了した子供のプロセス ID が返される、エラーの場 合 は -1 が、
WNOHANG が使用されていて適切な子供が存在しない場合には
0 が返される。 (これらの場合には errno が適切に設定される。)
エラー
ECHILD pid で指定したプロセスが存在しないか、呼び出した
プロセスの子プロセスでない。 (SIGCHLD に SIG_IGN を
設定した場合には自分自信の子供でもこうなる。)
となっているので、
if (ret == gChildProcessId || ret == ECHILD) {
この行は
if (ret == gChildProcessId || (ret == -1 && errno == ECHILD)) {
が正しいのかな、という気がするのですが。あるいは
if (ret == gChildProcessId || ret == -1) {
のほうがもっといいかも。
念のために woody の 0.3.10-1 も見てみましたが、変更されていない
みたいなので質問してみることにしました。もし「これでいいんだ」と
いうことでしたら無視してくださって結構です。 (> hattas さま)
--
# (わたしのおうちは浜松市、「夜のお菓子」で有名さ。)
<kgh12351@xxxxxxxxxxx> : Taketoshi Sano (佐野 武俊)