Thread Wie kann man eine Batch mit Hilfe von system() parallel aufrufen?? (9 answers)
Opened by crojay at 2011-09-23 15:16

topeg
 2013-06-14 16:56
#168246 #168246
User since
2006-07-10
2611 Artikel
BenutzerIn

user image
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)

View full thread Wie kann man eine Batch mit Hilfe von system() parallel aufrufen??