Это звучит как хороший вариант использования для Forks::Super::bg_qx
.
use Forks::Super 'bg_qx';
$output = bg_qx $bashcommand;
$output1 = bg_qx $bashcommand1;
$output2 = bg_qx $bashcommand2;
$output3 = bg_qx $bashcommand3;
будет выполнять эти четыре команды в фоновом режиме. Переменные, используемые для возвращаемых значений ($output
, $output1
и т. Д.), Являются перегруженными объектами. Ваша программа будет извлекать выходные данные из этих команд (ожидая завершения команд, если это необходимо) в следующий раз, когда эти переменные будут указаны в программе.
... more stuff happens ...
# if $bashcommand is done, this next line will execute right away
# otherwise, it will wait until $bashcommand finishes ...
print "Output of first command was ", $output;
&do_something_with_command_output($output1);
@output2 = split /\n/, $output2;
...
Update 2012-03-01: v0.60 Форкс :: Супер has some new constructions, которые позволяют получать результаты в контексте списка:
if ($condition) {
tie @output, 'Forks::Super::bg_qx', $bashcommand;
tie @output1, 'Forks::Super::bg_qx', $bashcommand1;
tie @output2, 'Forks::Super::bg_qx', $bashcommand2;
tie @output3, 'Forks::Super::bg_qx', $bashcommand3;
}
...
Как вы знаете, какая команда заканчивается первый? – ikegami
@ikegami - Это недокументировано, но если вам нужно знать, вы можете опросить '$ output-> is_ready' или проверить' $ output -> {job} '(который является объектом' Forks :: Super :: Job') – mob
о заказе или завершении, всегда можно использовать функцию «depend_on» Forks :: Super – snoofkin