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

[FDclone-users:00152] Re: {FreeBSD,OpenBSD}/sparc64, IA64(AIX 対応その後)



潮田@結局毎日お遊び出社です。


>  では本当に signal() の中に SIGCHLD の発生原因があるんでし
> ょうか?libc の source があればいいんでしょうけど、AIX って
> 売り物なので source は見られませんよねー。
はい。
付属していても、見たくも(読む力も)無いですけどね。

>  2.03b では一応 sigaction() を使って signal() を実装してお
> きますので、release されたら試してみて下さい。
>  返り値を必要とするケースのために sigaction() の第三引数を
> 使っていますが、それ以外は先の置換えと同じ実装にしてあるので、
> これで AIX でも動くようになるんじゃないでしょうか。
えーと、 GW 明けに出るのでしたよね。
喜んでためさせていただきます。

>  明示的に SIGCHLD に対して何かを指示しなくても、fork() 前後
> の作法として AIX 特有の決めごとがあるのかも知れませんね。何
> か man page には載っていませんでした?
>  signal() のような基本的関数で実装ミスがあるとは考えにくい
> ので、何か作法を間違えてしまっているのではないかと気になって
> います。
うーん、(英語)アレルギーが出そうになりながら見てみましたが、
無いように思います。
ターミナルで man signal を実行しても

http://www16.boulder.ibm.com/doc_link/en_US/a_doc_lib/libs/basetrf2/sigaction.htm

にある html を s/5.2/5.1/g としたものが、テキストとして
表示されるだけなんです。
(最下行の link は除く)

FAQ や何箇所か man の記述で、ゾンビを作りたくなければ SIGCHLD を
無効にしろってのが出てきますが、それが必ず sigaction subroutine で
と書かれているようです。
ですが、 signal を使うなの類の記述はみつかりません。
(まさか行間をよめ?)


>  IBM との保守契約はどうなっています?
BP(ビジネス・パートナー)向けのリース契約で、ハードに関しては
細かく書いてありますが、ソフトに関しては特に書いてないみたい
です。
購入した担当者に確認してみます。

> source を添付して問い
> 合わせてみると、実は library の bug だったなんてオチが出てく
> るかも。
最近にも

When the SIGCHLD signal handler in a parent process is set up
with the SA_NOCLDWAIT flag, no SIGCHLD is generated when a
child exits.
(http://www-1.ibm.com/support/docview.wss?uid=isg1IY42283)

なんてバグがみつかっているようなので lib 側だと思いたいですね。
(この BUG は 4.3, 5.1, 5.2 で同時に修正されています)
って、この問題修正ファイルの中に4/30 11h 台のタイムスタンプが
含まれているけれど、数時間前にリリースしたのかな。



余談にもお付き合いいただいてすいません。
>  fork() 後の親と子はどちらが先に処理されるか決まっていませ
> んので、単なるタイミングの問題かも知れません。親側のみもしく
> は子側のみに sleep() を噛ませてやると順序が一意に定まります
> から、それで期待した結果が得られるかも知れませんよ。
>  wait() の代わりに waitpid() を用いて明示的に待つ対象の子を
> 指定しておくと、よりはっきりすると思います。
どうやら、そのようです。
しつこく試すと、あのままでも 30 回に 1 度くらいは出力されて
いました。
sleep を入れれはすべて出ました。
単に wait() を waitpid() にすると、sleep() なしでも
10 回とも表示されているようでした。
(waitpid() の方が重い(遅い)のかな)