Как заставить Perl ждать запуска дочерних процессов в фоновом режиме с помощью system()?

Вам придется что-то изменить, изменение perl кода для использования fork, вероятно, проще, но child-process если вы категорически против child-process использования fork, вы можете child-process использовать сценарий оболочки child-process оболочки, который касается perl5 файла, когда это сделано, а perl5 затем ваш код Perl проверяет perl наличие файлов.

Вот обертка:

#!/bin/bash

$*

touch /tmp/$2.$PPID

Ваш linux код Perl будет выглядеть linux так:

for my $p (@a){
    system("/path/to/wrapper.sh /path/to/file.sh $p &");
}
while (@a) {
    delete $a[0] if -f "/tmp/$a[0].$$";
}

Но я думаю, что код разветвления perl5 безопаснее и понятнее:

my @pids;
for my $p (@a) {
    die "could not fork" unless defined(my $pid = fork);\
    unless ($pid) { #child execs
        exec "/path/to/file.sh", $p;
        die "exec of file.sh failed";
    }
    push @pids, $pid; #parent stores children's pids
}

#wait for all children to finish
for my $pid (@pids) {
    waitpid $pid, 0;
}

linux

perl

wait

child-process

2022-07-29T19:41:13+00:00
Вопросы с похожей тематикой, как у вопроса:

Как заставить Perl ждать запуска дочерних процессов в фоновом режиме с помощью system()?