| #!/usr/bin/perl -w |
| use strict; |
| $|++; |
| |
| my $ncpu=0; |
| |
| if (( $^O eq "solaris" ) || ( $^O eq "dec_osf" )) { |
| open(CPU,"/usr/sbin/psrinfo |") || die "Can't run psrinfo:$!"; |
| while (<CPU>) { $ncpu += 1; } |
| close(CPU); |
| print "$ncpu\n"; |
| } |
| elsif ( $^O eq "linux" ) { |
| open(CPU,"</proc/cpuinfo") || die "Can't read /proc/cpuinfo:$!"; |
| $ncpu = scalar grep(/^processor\s+:/,<CPU>); |
| close(CPU); |
| if ( $ncpu == 0 ) { # is this Linux on Alpha? |
| open(CPU,"</proc/cpuinfo") || die "Can't read /proc/cpuinfo:$!"; |
| my ($cpuline) = grep(/^cpus detected\s+: /,<CPU>); |
| close(CPU); |
| if ( $cpuline ) { |
| ($cpuline, $ncpu) = split /: /, $cpuline; |
| chomp $ncpu; |
| } |
| } |
| print "$ncpu\n"; |
| } |
| elsif (( $^O eq "darwin" ) ) { |
| open(CPU,"/usr/sbin/sysctl -n hw.ncpu|") || die "Can't read sysctl:$!"; |
| print <CPU>; |
| close(CPU); |
| } |
| elsif (( $^O eq "freebsd" ) || ( $^O eq "netbsd" ) || ( $^O eq "openbsd" )) { |
| open(CPU,"/sbin/sysctl -n hw.ncpu|") || die "Can't read sysctl:$!"; |
| print <CPU>; |
| close(CPU); |
| } |
| elsif ( $^O eq "irix" ) { |
| open(CPU,"/usr/sbin/mpadmin -n |") || die "Can't run mpadmin:$!"; |
| while (<CPU>) { $ncpu += 1; } |
| close(CPU); |
| print "$ncpu\n"; |
| } |
| elsif ( $^O eq "hpux" ) { |
| open(CPU,"/usr/bin/mpsched -s |") || die "Can't run mpsched:$!"; |
| my ($cpuline) = grep(/^Processor Count\s+: /,<CPU>); |
| close(CPU); |
| ($cpuline, $ncpu) = split /: /, $cpuline; |
| print $ncpu; |
| } |
| else { |
| warn "Unknown platform, just saying 1 CPU!\n"; |
| print "1\n"; |
| } |