2012-01-04 3 views
0

Я написал этот код, который должен открыть несколько процессов, проблема в его работе над linux хорошо, но когда я запускаю его на окнах, просто создайте один процесс !!. возможно ли создать многопроцессор на windows с perl?MultiProcessing через Perl на окнах

$j = ARGV[0]; 
for($i=1; $i<=$j; $i++){ 
system("perl example.pl word.txt.$i &"); 
} 
+0

Возможный дубликат http://stackoverflow.com/q/8157848/725418 – TLP

+1

@TLP: Это вопрос для Windows, я не думаю, что это дубликат – Zaid

ответ

3

Лучше fork из вмещающего сценария Perl, а затем вызвать system в дочернем процессе без задней &. wait будет необходим и в родительском.

Поскольку аргумент system анализируется системной оболочкой, вы столкнетесь с различным поведением оболочки Windows, чем, например, с Bash.

+0

может у дать мне пример, как мой код? – user1124705

6

& есть * nix предмет. Явный fork в Windows это сделает.

Имейте в виду, что Windows-реализации Perl имитируют, используя нитки, так что это может быть другой вариант.

my @pids; 
for my $i (1 .. $j) { 

    my $pid = fork; 

    unless ($pid) { # Child 
     system("perl example.pl word.txt.$i"); 
     exit 0; 
    } 

    push @pids, $pid; 
} 

waitpid $_, 0 foreach @pids; 
0

Гораздо проще использовать команду START (команда Windows Batch), чем для процессов вилки. Недостатком является то, что он откроет несколько окон DOS.

system "start perl example.pl word.txt.$i"; 
Смежные вопросы