[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[FDclone-users:00173] Re: {FreeBSD,OpenBSD}/sparc64, IA64(AIX対応その後)
- Subject: [FDclone-users:00173] Re: {FreeBSD,OpenBSD}/sparc64, IA64(AIX対応その後)
- From: SHIOTA Shoichi <Shoichi.Shiota@lightwell.co.jp>
- Date: Sat, 10 May 2003 12:12:38 +0900
潮田です。
Takashi SHIRAI <shirai@unixusers.net> wrote:
> タイミングの問題ですね。fork() の後、子が親が看取るより先
> に終了してしまった場合、親が wait() し始める前に SIGCHLD を
> 発呼してしまうんだと思います。
> waitchild() の中で waitjob() を呼んでいる箇所がありますが、
> ここに sleep() を挿入するとほぼ 100% の再現率になるんじゃな
> いでしょうか。
はい、これでどれも No child processes が表示されるように
なりました。
信頼度が低い報告ですいません。
> 2. の対処法で patch を作成してみましたので、度々ですみませ
> んが、また 2.03a に戻して一からやり直してみて下さい。
前回同様
>> 7. patch 適用後、system.c l.1529 の「#ifdef NOJOB」
>> を「#if 0」に書換えて「make sh bsh all」を実行。
>> 8. 作りなおした ./fd, ./fdsh, ./fdbsh に対して 1.-6.
>> を再度検証。
ですよね。
> 1. ./fd で PAGER や EDITOR 等の子 process を起動する。
正常に FD へ戻ってきます。
> 2. ./fdsh で sleep や /bin/echo 等の子 process を起動する。
正常に終了します。
sleep() をかませても No child processes とはなりませんでした。
> 3. ./fdsh で「&」付の back ground job として 2. と同
> 様の検証。
正常に終了します。
> 4. ./fd で set -b を実行した後 1. と同様の検証。
正常に FD へ戻ってきます。
> 5. ./fdsh で set -b を実行した後 2., 3. と同様の検証。
2. 3. とも正常に終了します。
> 6. ./fdbsh で 2., 3. と同様の検証。
2. 3. とも正常に終了します。
> > > 5. ./fdsh で set -b を実行した後 2., 3. と同様の検証。
> > 2. 3. とも正常に終了します。
>
> set -b した場合もタイミングによっては ECHILD で error にな
> る筈です。sleep() を挿入してみると明確になるでしょう。
これも、 sleep() を入れるとなりました。
# fdsh でも tcsh でも /bin/echo Hi & が動く。
# 確かに、バックで停止していたのですが。
# うーん、この間のテストではボケていたのな。
# fdsh はともかく tcsh なんて変えていないのに...。