父母为什么不收养孩子?

时间:2013-03-09 20:44:13

标签: c

我正在编写将进程分成两个的代码,然后父进程通过管道将参数发送给子进程。孩子逐个计算字符并打印最终结果。然后父母应该使用waitpid()来收割孩子。

如果我在子进程中删除了循环,那么将会发生收获,但如果我将其保留(这是必要的),程序将执行并终止,但不会发生收获。我不知道为什么会这样。任何帮助将不胜感激。这是一堂课的作业。谢谢!

这是我的代码:

    if( waitpid( pid, &status, WNOHANG ) > 0 )
        {
        printf( "parent reaps child status 0x%08X\n", status );
        if( WIFEXITED(status) )
        printf( "child exited normally with %d\n", WEXITSTATUS(status) );
    }
    close( out );
    return 0;   

此外,我意识到此代码中没有错误检查...我只是想让它先工作......

1 个答案:

答案 0 :(得分:4)

您必须告诉客户端何时停止,您可以通过关闭管道来执行此操作。所以父进程必须这样做:

for( i = 0; i < (argc - 1); i++ )
{
    for( idx = 0; idx < strlen(argv[i + 1]); idx++ )
        write( out, &argv[i + 1][idx], 1 );
}
close(out);  // <----
sleep(1);
if( waitpid( pid, &status, WNOHANG ) > 0 )

此外,WNOHANG告诉waitpid不要等待子进程没有完成。所以在你的情况下,它还没有完成。

waitpid( pid, &status, WNOHANG )
                       ^^^^