in reply to Parallel::ForkManager Problem
I'd do it with threads this way. (I've used ping cos I don't have nmap but that's a one line change).
#! perl -slw use strict; use threads qw[ yield ]; use Thread::Queue; if( !@ARGV or $ARGV[ 0 ] !~ m[\d{1,3}\.\d{1,3}\.\d{1,3}] ) { die "Usage: $0 xxx.xxx.xxx\nEnter 3 octets only\n"; } my $dom = $ARGV[ 0 ]; my $Qwork = new Thread::Queue; my $Qresults = new Thread::Queue; sub work{ yield until $Qwork->pending; while( $Qwork->pending ) { my $sub = $Qwork->dequeue; system "ping -n 1 -l 0 $dom.$sub 2>&1 1>nul"; $Qresults->enqueue( sprintf "$dom.$sub %s alive", $? >> 8 ? 'is not' : 'is' ); } return; } threads->new( \&work )->detach for 1 .. 20; $Qwork->enqueue( 1..255 ); yield until $Qresults->pending == 255; print $Qresults->dequeue while $Qresults->pending;
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: Parallel::ForkManager Problem (threads instead?)
by Anonymous Monk on Jun 11, 2004 at 07:42 UTC |