Thread Wie kann man eine Batch mit Hilfe von system() parallel aufrufen??
(9 answers)
Opened by crojay at 2011-09-23 15:16
Im allgemeinen ist es nicht sinnvoll mit mehren Prozessen in eine Datei zu schreiben.
Windows Blockiert so etwas ganz. Andere Betriebssysteme handhaben das ein etwas anders. Das die Meldung kommt, lässt mich vermuten das du doppelte Einträge in der "hosts2ping.txt" hast. Dadurch gibt es mehrere Prozesse, die in die selbe Datei schreiben wollen. Mein Vorschlag wäre es ein Hash zu nutzen um schon angepingte Hosts zu überspringen: Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 #!/usr/bin/perl -w use strict; use Parallel::ForkManager; my $hosts2ping = "hosts2ping.txt"; my @addresses = (); # besserer weg zum lesen der Liste: { open(my $fh, '<', $hosts2ping) or die("ERROR open $hosts2ping ($!)\n"); @addresses = <$fh>; # chomp kann auch mit Arrays umgehen chomp @addresses; close($fh); } my $pm = new Parallel::ForkManager(10); my %used; foreach my $host (@addresses) { # wenn der Host schon mal gefunden wurde # weiter zum nächsten next if $used{$host}++; $pm->start and next; system("ping -n 1 -4 $host > c:\\tmp\\$host"); $pm->finish; } $pm->wait_all_children; Last edited: 2013-06-14 17:00:05 +0200 (CEST) |