2017-02-20 66 views
1

首先,这是一个家庭作业问题,所以我不想找人给我答案。我只是希望指出正确的方向。我怎样才能正好分叉6个过程

我被授予了使用c语言和命令fork()创建正好6个进程的任务,然后让所有6个睡眠一分钟或两分钟。更难的部分是,我们不允许使用任何循环,并且只有3次调用fork()总数。几乎所有关于fork和n个进程的信息都告诉用户使用for循环。我也看过这里找到类似的东西,但是,再次,为循环。

我已经成功创建了8个,但这太多了。所以我想知道是否可以分叉或杀死特定的进程。

例如:给定第一个分支,你得到父进程和子进程。再次分叉,你有两个孩子的原始父母和一个孩子的第一个孩子。那么是否可以仅派生()只有拥有一个孩子的原始孩子?我发现的一切似乎都表明,在所有派生进程执行fork调用后发生的任何事情,所以我不确定如何实现我需要执行的操作。

+2

六个显式调用'fork' *父只*? –

+0

对不起,我改变了一些问题来解释更多。我只能在代码总数中调用fork()3次。 – KM529

+1

这可能有所帮助:http://stackoverflow.com/questions/21387349/how-does-the-fork-know-whether-it-is-in-child-process-and-in-parent-process – chiaboy

回答

6

诀窍是使用fork返回值(< 0是一个错误,== 0是孩子和> 0是父进程),让第一个孩子没有要求fork拿到3个流程:

//we start with 1 process 
if (fork() > 0) //now we have 2 processes 
    fork(); //only the parent calls this fork because of the if, so we have 3 processes 
fork(); //all 3 processes calls this fork, so we have 6 processes 

另一种可能性:

fork(); //2 
if (fork() > 0) //4 
    fork(); //only the 2 parents from the second call will call this ==> 6