叉3个孩子分别运行单独的过程

时间:2011-07-12 14:31:29

标签: fork children

我见过的大多数例子只是打印“我是PID的孩子”。我正在尝试分叉3个孩子,每个孩子运行3个不同的过程。每个孩子都是独立的C课程。因此,我需要在fork()之后使用exec()调用它们,但我的问题在于语法以及如何引用每个子节点,因为所有子进程都有pid = 0.。

1 个答案:

答案 0 :(得分:0)

使用getmypid()获取孩子们的pids。 fork调用在子进程中返回0:

for($i = 0; $i < 3; $i++) {
   $pid = pcntl_fork();
   if ($pid == -1) {
        die("Fork failed on loop #$i");
   } else if ($pid == 0) {
        $mypid = getmypid(); // executes in the children
        exec(... whatever this child has to run ...);
   } else {
        ... executes in the parent
   }
}

请注意这在PHP中,但几乎所有使用fork()的语言的基本机制都是相同的。


随访:

...
} else if ($pid == 0) {
    $mypid = getmypid();
    switch ($i) {
         case 0:
             exec(... app #1 ...)
         case 1:
             exec(... app #2 ...)
         case 2:
             exec(... app #3 ...)
    }
} ...

您是如何启动3款应用的。在父脚本调用fork()时,每个孩子都会得到一个不同的$ i,因此您可以通过$ i的值来确定您所在的孩子。