[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[FDclone-users:00148] Re: {FreeBSD,OpenBSD}/sparc64, IA64(AIX 対応その後)
- Subject: [FDclone-users:00148] Re: {FreeBSD,OpenBSD}/sparc64, IA64(AIX 対応その後)
- From: SHIOTA Shoichi <Shoichi.Shiota@lightwell.co.jp>
- Date: Tue, 29 Apr 2003 13:37:54 +0900
潮田です。
大変おそくなりました。
> しらいです。
>
> In Message-Id <03Feb24.175916jst.119043@inetgw.lightwell.co.jp>
> SHIOTA Shoichi <Shoichi.Shiota@lightwell.co.jp>さんwrites:
> > 潮田です。
>
> > > いや、そういきなり一足飛びに先に進めないで、徐々に確認して
> > > いって下さい。ますは fdsh で sleep が動くところから。これが
> > > 出来て初めて次のステップに進めましょう。
> > 了解しました。
>
> 遅くなっても構いませんので次の報告をお待ちしています。
で、ご報告を。
GW に入ったので、会社へ遊びに行き(仕事ではなくと言う意味で)
追って見ました。
で、 gdb にだまされていなければ、以下のような動きをしてリソースを
食いつぶして落ちているようです。
1. 子供が終了する
2. trap_chld() で捕獲される
3. trap_common() の終わりのほうで、trap_chld() をシグナルハンド
ラとして再度セット
4. (なぜか) 3 の実行で SIGCHLD が再度やってくる
5. 2 からループ
と、無限の再帰呼び出しとでも言うような状態を起こしているように
みえます。
このため以下のように修正を入れてみました。
--- ここから ---
$ gdiff -u system.c.org system.c
--- system.c.org 2003-04-15 00:00:00.000000000 +0900
+++ system.c 2003-04-29 12:54:45.000000000 +0900
@@ -2051,7 +2051,13 @@
if (trapped < 0) Xexit2(sig + 128);
- if (signallist[i].func) signal(sig, (sigcst_t)(signallist[i].func));
+ if (signallist[i].func)
+#ifdef SIGCHLD
+ if (sig != SIGCHLD)
+ signal(sig, (sigcst_t)(signallist[i].func));
+#else
+ signal(sig, (sigcst_t)(signallist[i].func));
+#endif
errno = duperrno;
return(trapped);
}
--- ここまで ---
(折り返されているかもしれませんが、おわかりいただけると思います)
これで、やっと
$ ./fdsh
$ sleep 2
$
と正常に動くようになりました。
また FDclone 上で
* Enter での PAGER の起動
* e での EDITOR 起動
* x で vi foo
なども起動したコマンドが終了後に、無事制御が FDclone へ
戻ることを確認しました。
ただ、これは完全に対処療法で理解や納得の上での修正ではありません。
私自身、 AIX 上で同じこと(SIGCHLD のハンドラ中で再度 SIGCHLD の
ハンドラのセット)をしているプログラムを書いていて、それが今も
某所で動いています。
もっと雑なつくりで、どんな signal を捕らえても、すべてのハンドラを
再度セットするようなやつですが。
うーん、なぞ。
> > このマシン自体は、すぐに IBM へ返してしまいますが、社内の
> > 他の部門には AIX 4.3.3 のマシンは存在していますので、動作確認
> > ぐらいであれば、いつでもできます。
現在 GW 中で他の部門の人間を捕まえれず、上記の結果は 5L
$ oslevel -r
5100-03
という version でのものです。
休みがあけたら、 4.3.3 でも試してみます。
# 販売や導入にかかわっていない私には Web 上で探し出せませんが
# AIX 4.3.3 のサポートは今年いっぱいだそうです。
# IBM は強制的に 5L (5.1 or 5.2) へ移行を行いたいようですね。
# 4.3.3 なんて version はそこら中(上記の某所もそうなんです)
# に入っているので猛反発は必至?