Cannot Run Fork, нежелательное количество процессов разветвляется - PullRequest
0 голосов
/ 28 ноября 2011

У меня проблема с Fork в Perl. Я хочу выполнить 10 процессов Fork за один переход от одного скрипта, и все 10 дочерних процессов будут выполнять одно и то же (копировать файлы из одного места в другое).

Когда я выполняю этот код, моя ОС зависает, и когда я на самом деле проверяю, существует огромное количество процессов, которые разветвляются за один раз.

Вот мой код:

while ($callCount <= $totalCalls) {
 for (1..$TotalProcessToFork) {
         print "Call -> $callCount";
         if($pid = fork) {
             #in Parent Process
             print " :: PID -> $pid\n";
             push(@list_of_pid, $pid);
         } else {
             #in Child Process
             `touch $callCount`;
         }
         $callCount++;
     }
 }

Теперь, когда я выполняю этот код, выполняется около 1000 дочерних процессов.

Может кто-нибудь сказать мне, что я здесь не так делаю.

Ответы [ 3 ]

4 голосов
/ 28 ноября 2011

Детская вилка тоже. Вам нужно выйти из цикла так или иначе в дочернем случае. Распространенный шаблон - это fork и exec, или вы можете просто сказать last.

1 голос
/ 28 ноября 2011

Возможно, вы захотите взглянуть на Parallel::ForkManager, что, вероятно, облегчит вашу жизнь.

Также не используйте внешнюю команду Linux touch; лучше использовать File::Touch.

1 голос
/ 28 ноября 2011

Это происходит потому, что когда вы создаете процесс, он создает два процесса.Давайте назовем их a1 и a2.Теперь a1 является родителем, а a2 - дочерним, поэтому при выполнении a2 создаются b1 и b2.Когда все они выполняются, они также рекурсивно создают новые процессы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...