Вилка 3 детей, чтобы запустить отдельный процесс каждый - PullRequest
0 голосов
/ 12 июля 2011

В большинстве примеров я видел только печать «Я ребенок с ПИД».Я пытаюсь раскошелиться на 3 детей, каждый из которых выполняет 3 разных процесса.У каждого из детей есть отдельные программы на C.Следовательно, мне нужно вызывать их с помощью exec () после fork (), но моя проблема в синтаксисе и способах ссылки на каждый дочерний процесс, потому что все дочерние процессы имеют pid = 0.

1 Ответ

0 голосов
/ 12 июля 2011

Используйте getmypid(), чтобы получить педи в детях. Вызов 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 ().


Followup:

...
} 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.

...