所以我遇到一個數組@cpuAll在$ pm-> finish後失去它的值的問題..這只是對一堆服務器進行SSH連接並將一些工作狀態恢復正常。但是在最後一個循環完成後,數組不會打印。我不想將所有文件都寫入文件,因爲我將它加載到數組中後性能提高了90%。Perl forkmanager刪除數組值
my @cpuAll =();
my @memAll =();
$pm->run_on_finish(sub{
my ($pid,$exit_code,$ident,$exit_signal,$core_dump,$data)[email protected]_;
push(@data,$data);
});
for(@servers)
{
next if $_ =~ "10.1.4.52";
next if $_ =~ "10.1.4.106";
my $pid = $pm->start and next;
chomp;
my @output_cpu = `/usr/bin/ssh $_ \"/root/scripts/punkbuster.cpu|sed 's/ (//g'|sed 's/)//g'|sed s'/ //g'\"`;
for(@output_cpu)
{
chomp;
my ($server,$username,$cpu,$process)=(split /:/, $_)[0,1,2,3];
# push(@cpuAll,"$server\,$username\,$cpu\,$process\,$date\,$time\n");
}
$pm->finish(0, [$server,$username,$cpu,$process]);
}
print $_ for @data;
print "OK\n";
$pm->wait_all_children;
您可以在子進程中將數據添加到'@ cpuAll',但嘗試從父進程中的'@ cpuAll'檢索它。您需要將孩子的數據發送給父母。請參閱P :: FM文檔中標題爲「從子進程中檢索數據結構」的部分。 – ikegami
但是我認爲自從我宣佈它在循環之外它會堅持,因爲它是一個完全不同的過程,它需要傳回以在父進程中使用。 – ThatGuy
是的,更改一個進程上的變量不會奇蹟般地影響其他進程中類似命名的變量。感謝上帝! – ikegami