gpt4 book ai didi

c - 为什么 parent 不收割 child ?

转载 作者:太空宇宙 更新时间:2023-11-04 06:35:45 26 4
gpt4 key购买 nike

我正在编写将一个进程分成两个进程的代码,然后父级通过管道将参数发送到 main 到子级。 child 一个一个地数字符,打印最后的结果。然后 parent 应该使用 waitpid() 收获 child 。

如果我去掉子进程中的循环,那么reap就会发生,但是如果我把它留在里面(这是必要的),程序执行并终止,但是reap不会发生。我不知道这是为什么。任何帮助将不胜感激。这是一门课的作业。谢谢!

这是我的代码:

    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;

我还意识到这段代码中没有错误检查......我只是想让它先工作......

最佳答案

您必须告诉客户何时停止,您可以通过关闭管道来做到这一点。所以父进程必须做:

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 )
^^^^

关于c - 为什么 parent 不收割 child ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15315725/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com