0

プログラム関数にこのコードがあります。そして、このコード パスにヒットするテスト スクリプトがあります。スクリプトは、この関数を複数回 (~1000) 通過します。

親ブロックの syslog から子 pid を確認できるため、fork() 呼び出しは成功しますが、子ブロックからは何も確認できません。

これは常に発生するわけではありません。100回の試行に1回しか発生しません。

これが発生する一般的な理由は何ですか。

また、障害に関する詳細情報を取得するには、何を探す必要がありますか。

int i;

if ((i = fork()) < 0) {
    syslog(LOG_NOTICE, "(%s): fork failed!\n", __func__);
}
if (i) {
    syslog(LOG_NOTICE, "(%s): fork Parent: id: %d\n", __func__, i);
} else {
    syslog(LOG_NOTICE, "(%s): fork child\n", __func__);
    /* Do something */
}

Output:
telnetd[24600]: (startslave): fork Parent: id: 24601
<Thats it, no log after this!!>

正確には、これは freeBSD telnetd startslave() コードの一部であり、スクリプトは telnet を使用してログインし、1000 回ログアウトしようとして失敗することがあります。失敗は保証されており、100 回の試行後または 700 回の試行後に発生する可能性があります。

4

0 に答える 0