camel

GNU����ʤ���� ��äƤ��ޤ� xargs.

���ѥ��Ģ - xargs���ޥ�ɤ�Ȥäƻ��ꤷ�����ޥ�ɤ�����¹Ԥ�����
���ޤ��Τ��Ƥ��ʤ�����GNU��xargs���ޥ�ɤˤϡ�
�ץ������κ����������Ǥ��륪�ץ����Ȥ����Τ��Ѱդ���Ƥ��롣
�����Ȥäơ��ץ�����������¹Ԥ����Ƥߤ褦��

OS X��xargs(1)��gnu�Ǥ���ʤ������͡�

�Ȥ����櫓��perl��¨���Ǻ�ä��Τ������顣

pargs
#!/usr/local/bin/perl
use strict;
use warnings;
use Getopt::Std;
use POSIX ":sys_wait_h";

our $PPID = $$;
our %Opt;
getopts "P:v" => \%Opt;

sub chld_handler{
    while ((my $child = waitpid(-1,WNOHANG)) > 0) {
        warn "$child:$?" if $Opt{V};
        forkit();
    }
    $SIG{CHLD} = \&chld_handler;  # still loathe sysV
}
$SIG{CHLD} = \&chld_handler;

sub forkit{
    my $line = <STDIN>;
    exit unless defined $line;
    chomp $line;
    my @args = split /\s+/, $line;
    my $pid = fork();
    die "fork failed : $!" unless defined $pid;
    return $pid if $pid; # parent
    warn "$$: ", join(" ", @ARGV, @args), "\n" if $Opt{v};
    unless(exec @ARGV, @args){
        # kill parent if not executable
        kill INT => $PPID;
    }
    exit;
}

$Opt{P} ||= 1;
$Opt{v} ||= $Opt{V};
@ARGV or die " $0 [-P number_of_processes ] command ...";
forkit() for (1..$Opt{P}); # 1st -P processes
1 while 1; # loop
__END__

���Ƥ��̤ꡢ��äƤ��뤳�Ȥϼ¤�ñ��ǡ�-P�ǻ��ꤷ�����������餫����fork()���ơ�SIGCHLD����������ٿ������ץ�������fork()������������-v����ꤹ��ȡ������ͻҤ򸫤���褦�ˤ��Ƥ���ޤ����㤨�С�

url.lst
http://www.ring.gr.jp/pub/lang/perl/CPAN/src/perl-5.8.1.tar.gz
http://www.ring.gr.jp/pub/lang/perl/CPAN/src/perl-5.8.2.tar.gz
http://www.ring.gr.jp/pub/lang/perl/CPAN/src/perl-5.8.3.tar.gz
http://www.ring.gr.jp/pub/lang/perl/CPAN/src/perl-5.8.4.tar.gz
http://www.ring.gr.jp/pub/lang/perl/CPAN/src/perl-5.8.5.tar.gz
http://www.ring.gr.jp/pub/lang/perl/CPAN/src/perl-5.8.6.tar.gz
http://www.ring.gr.jp/pub/lang/perl/CPAN/src/perl-5.8.7.tar.gz
http://www.ring.gr.jp/pub/lang/perl/CPAN/src/perl-5.8.8.tar.gz

�ʤ�ƤΤ��Ѱդ��ơ�

% pargs -v -P4 lwp-download < url.lst > /dev/null

�Ȥ���ȡ�

3667: lwp-download http://www.ring.gr.jp/pub/lang/perl/CPAN/src/perl-5.8.1.tar.gz
3668: lwp-download http://www.ring.gr.jp/pub/lang/perl/CPAN/src/perl-5.8.2.tar.gz
3669: lwp-download http://www.ring.gr.jp/pub/lang/perl/CPAN/src/perl-5.8.3.tar.gz
3670: lwp-download http://www.ring.gr.jp/pub/lang/perl/CPAN/src/perl-5.8.4.tar.gz
3671: lwp-download http://www.ring.gr.jp/pub/lang/perl/CPAN/src/perl-5.8.5.tar.gz
3672: lwp-download http://www.ring.gr.jp/pub/lang/perl/CPAN/src/perl-5.8.6.tar.gz
3673: lwp-download http://www.ring.gr.jp/pub/lang/perl/CPAN/src/perl-5.8.7.tar.gz
3674: lwp-download http://www.ring.gr.jp/pub/lang/perl/CPAN/src/perl-5.8.8.tar.gz

�ʤ�ƴ����ˤʤ�ޤ���

Enjoy!

Dan the Parallel Perl Monger