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