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

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



潮田です。

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 なんて変えていないのに...。