如何创buildunix进程二叉树?

如何创buildunix进程二叉树?,第1张

概述如何创buildunix进程二叉树?

有人能帮我一把,不一定能完成我的功课。

我需要使用fork()创build一个进程树。 在Unix / C到目前为止最好的我可以到达第四级这里是我的代码:

/* Includes */ #include <unistd.h> /* Symbolic Constants */ #include <stdio.h> /* input/Output */ #include <stdlib.h> /* General UtilitIEs */ int main() { pID_t childpID; pID_t pID; int i; childpID=fork(); waitpID(); i=0; for (; i<1; i++) { int b=0; for (; b<1;b++) { childpID=fork(); fprintf(stderr,"the value of i is %d,i am %ld,my parent is %ldn",i,(long)getpID(),(long)getppID()); if (childpID==0) { break; } } if (childpID==0) { break; } } sleep(1); }

我对C编程非常陌生,一般来说编程很好,所以我想问问大众我错过了哪些步骤。 树深度需要用户指定,所以我想我会使用na循环,但只能跨越一个级别而不是创造新的水平。

有人可以帮助我,并指出我在正确的方向:)我需要它像这样叉

如何通过每次分派新的subprocess多次运行同一个jar文件?

为什么fork()和printf()的输出比我预测的要多?

在windows上用PHP分叉

printf(“%d”,i ++)与i ++之间有什么区别; 的printf(“%d”,i)的?

使用VirtualProtect将页面标记为copy-on-write(穷人在windows上分叉)

i / / / / / ii / / / / iiii / / / / iiiiiiii

我怎样才能从windows上的Perl CGI脚本分叉后台进程?

如何保持同一个核心上的父母和子女的过程

防止fork()复制套接字

os.fork()会在写入时使用copy还是在Python中完成父进程的完整副本?

我的文件服务器程序已经停止僵尸进程

waitpID()函数需要参数。

最初的childpID = fork(); 是意外的。

你可以明智地写:

for (int i = 0; i < 1; i++)

循环除非你坚持使用C89而不是C99语法。

尝试2

输出示例

Start 46480 i am 46480,my parent is 30775 i am 46482,my parent is 46480 i am 46481,my parent is 46480 i am 46483,my parent is 46481 i am 46484,my parent is 46482 i am 46486,my parent is 46482 i am 46487,my parent is 46483 Exit 46487 i am 46488,my parent is 46484 Exit 46488 i am 46485,my parent is 46481 i am 46491,my parent is 46484 Exit 46491 i am 46489,my parent is 46483 Exit 46489 Exit 46483 i am 46492,my parent is 46486 Exit 46492 Exit 46484 i am 46490,my parent is 46486 Exit 46490 i am 46493,my parent is 46485 Exit 46493 Exit 46486 Exit 46482 i am 46494,my parent is 46485 Exit 46494 Exit 46485 Exit 46481 Exit 46480

示例源

#include <unistd.h> #include <stdio.h> #include <stdlib.h> #include <sys/wait.h> static pID_t fork_ok(voID) { pID_t pID; if ((pID = fork()) < 0) { fprintf(stderr,"Fork failure in pID %dn",(int)getpID()); exit(1); } return pID; } int main(voID) { fprintf(stderr,"Start %dn",(int)getpID()); for (int level = 0; level < 3; leveL++) { if (fork_ok() == 0 || fork_ok() == 0) continue; break; } fprintf(stderr,"i am %d,my parent is %dn",(int)getpID(),(int)getppID()); while (wait(0) > 0) ; fprintf(stderr,"Exit %dn",(int)getpID()); return(0); }

这使用循环,有点不寻常的循环。 在每个级别上,父母的流程分派两个孩子; 孩子们各自“继续”到下一个等级,而父母完成并退出循环。 清理代码和以前一样(见下文)。

递归变体

#include <unistd.h> #include <stdio.h> #include <stdlib.h> #include <sys/wait.h> static pID_t fork_ok(voID) { pID_t pID; if ((pID = fork()) < 0) { fprintf(stderr,(int)getpID()); exit(1); } return pID; } static voID new_level(int level) { if (level > 3) return; if (fork_ok() == 0 || fork_ok() == 0) new_level(level+1); else { printf("i am %d,(int)getppID()); while (wait(0) > 0) ; printf("Exit %dn",(int)getpID()); } } int main(voID) { printf("Start %dn",(int)getpID()); fflush(0); new_level(0); return(0); }

尝试1

我不相信你需要任何循环。 这似乎是对我的伎俩:

输出示例

Start 44397 i am 44397,my parent is 30775 i am 44400,my parent is 44397 i am 44401,my parent is 44397 Exit 44401 i am 44399,my parent is 44397 i am 44398,my parent is 44397 i am 44404,my parent is 44400 Exit 44404 i am 44403,my parent is 44399 i am 44402,my parent is 44398 i am 44405,my parent is 44398 i am 44407,my parent is 44398 Exit 44407 Exit 44400 i am 44406,my parent is 44399 Exit 44406 i am 44408,my parent is 44402 i am 44410,my parent is 44402 i am 44411,my parent is 44405 Exit 44410 Exit 44411 i am 44409,my parent is 44403 Exit 44409 Exit 44405 i am 44412,my parent is 44408 Exit 44412 Exit 44403 Exit 44399 Exit 44408 Exit 44402 Exit 44398 Exit 44397

源代码

#include <unistd.h> #include <stdio.h> #include <stdlib.h> #include <sys/wait.h> int main(voID) { fprintf(stderr,(int)getpID()); if (fork() < 0 || fork() < 0 || fork() < 0 || fork() < 0) { fprintf(stderr,(int)getpID()); exit(1); } fprintf(stderr,(int)getpID()); return(0); }

总结

以上是内存溢出为你收集整理的如何创buildunix进程二叉树?全部内容,希望文章能够帮你解决如何创buildunix进程二叉树?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1159294.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-01
下一篇 2022-06-01

发表评论

登录后才能评论

评论列表(0条)

保存