On Nov 7, 11:40 am, "alexxx.ma...@gmail.com" <alexxx.ma...@gmail.com>
wrote:
> Inspired by the recent posting of "FAQ 8.39 How do I set CPU limits?",
> I hoped to solve this problem, that I always had with computationally
> intensive scripts - namely that the CPU usage goes to 100%, and a very
> noisy fan starts.
> I'd much prefer to be able to set my script's CPU usage at - say - 75%
> or similar...
>
> In the FAQ I saw that this possibility is in the BSD::Resource module,
> but unfortunately I work in Linux.
> Moreover, I'm not certain that even under BSD this could be possible:
> setrlimit seems to allow you just to kill processes going beyond your
> given threshold.
>
> Any hint?
>
> Thanks!
>
> Alessandro Magni
you can use BSD::Resource on linux.
or try this script :
#!/usr/bin/perl
#Description: These subs allow you control how much % CPU maximum
will use your script. CPU_start() must be called once when you script
start.
#This example script will use 30% CPU until Ctrl-C pressed:
CPU_start(); CPU_max(30) while 1;
use Time::HiRes qw(time);
sub CPU_used {
(map {$_->[13]+$_->[14]}
[split " ", Cat("/proc/self/stat")])[0]
}
{ my %start = (tm => 0, cpu => 0);
sub CPU_start { @start{"tm","cpu"} = (time(),CPU_used()) }
sub CPU_max {
my ($max, $real, $cpu) = ($_[0], time()-$start{tm},
CPU_used()-$start{cpu});
return unless defined($max) and $max > 0;
&sleep( $cpu/$max-$real );
}}
#
# macro used from CPU_used() and CPU_max()
#
sub sleep { select undef,undef,undef,$_[0] }
sub Cat {
local *F;
open F, "< ".$_[0] or return;
local $/ unless wantarray;
return <F>;
}
zaher el siddik
http://www.unixshells.nl/