-1

小さなデーモンの単体テストに取り組んでいますが、フォークされたプロセスから正しい終了コードを取得するのに問題があります。テストケースの 1 つだけを実行すると正常に動作しますが、2 つ続けて実行すると、戻りコードとして EXIT_SUCCESS を取得できないため、2 つ目のテストケースは失敗します。確認したところ、2 番目のテスト ケースでは exit(EXIT_SUCCESS) が呼び出されるため、それが返されるはずですが、どういうわけか別の子プロセスが取得されます。

私は何が欠けていますか?

bool test_setup() {
    pid_t pid = fork();
    if(pid < 0) {
        fail("Failed to fork", PLACE);
    }
    else if(pid > 0) { //main thread
        //act as client to server, this code might call exit(EXIT_FAILURE)
        exit(EXIT_SUCCESS);
    }
    //child thread
    //run server
    int retval; //return value from child process
    wait(&retval);
    return WEXITSTATUS(retval) == EXIT_SUCCESS;
}

bool test_send_one() {
    pid_t pid = fork();
    if(pid < 0) {
        fail("Failed to fork", PLACE);
    }
    else if(pid > 0) { //main thread
        //act as client to server, this code might call exit(EXIT_FAILURE)
        cout <<"exit success" <<endl;
        exit(EXIT_SUCCESS);
    }
    //child thread
    //run server
    int retval; //return value from child process
    wait(&retval);
    return WEXITSTATUS(retval) == EXIT_SUCCESS;
}

int main(int argc, char** argv) {
    test_setup();   
    test_send_one();
}
4

1 に答える 1

0

if(pid> 0)とif(pid == 0)を入れ替えました。

于 2012-09-26T10:14:26.373 に答える