[理工] OS fork()的问题

楼主: s90210jackle (jacklen)   2017-11-29 00:00:10
https://i.imgur.com/wjokZQK.jpg
小弟有些地方不太清楚想请教大大们><
1. If里面的fork是不是不管前面的process=0或>0都要生child 所以这里第一层的chlid和main都可以生chlid?
但是为什么到了else if 的fork只有黄色=0的child可以生蓝色child
2. Main遇到第一个fork所生的铅笔色child >0 是因为遇到第二个黄色的fork生出child 而由原本的=0变成>0吗?
遇到了红色fork由>0的main和第一层child生出下面的child我可以可以理解 但是为什么遇到绿色fork的时候 可以由第三层红色child生出 它们不是=0不符合if的条件吗
抱歉手机排版有点乱 麻烦大大帮忙解惑><
作者: olen0622 (hong)   2017-11-29 00:44:00
看得出来你程式写得少 这是循环观念上的问题1.先fork()再判断大小所以会先生child 铅笔色进循环黄色进else if所以只有它产蓝色
作者: barry70490 (blacksea741)   2017-11-29 00:47:00
知道这个什么意思 但是不太会解释
作者: olen0622 (hong)   2017-11-29 00:49:00
2.主行程回传子行程pid 两个行程进循环两次fork红色不会再出来判断条件
作者: alan23273850   2017-11-29 00:55:00
解这种题目要把握的两个观念:1. 当程式呼叫 fork()时,会复制出一份一模一样的程式码,而且会从fork()执行完的地方继续执行(parent和child都是)。2. 画 process tree 的资料结构尽量用 Left-child,right-sibling binary tree,在视觉上或观念上都会很清楚,这样不管题目怎么出就都不会错
作者: TMDTMD2487 (ㄚ冰)   2017-11-29 01:03:00
fork相当于一个带有回传值的副程式,放在if条件中要先执行完并得到回传值在判断条件话说我之前有发过文特地追踪一题,你可以去看一下
楼主: s90210jackle (jacklen)   2017-11-29 22:48:00
谢谢t大s大 有看到你们详细的追踪后完全懂了 真的太感激了 ㄒ_ㄒ

Links booklink

Contact Us: admin [ a t ] ucptt.com