[Collab-qa-commits] r803 - svnbuildstat/trunk/script
goneri at alioth.debian.org
goneri at alioth.debian.org
Sat Apr 19 22:53:37 UTC 2008
Author: goneri
Date: 2008-04-19 22:53:37 +0000 (Sat, 19 Apr 2008)
New Revision: 803
Modified:
svnbuildstat/trunk/script/svnbuildstat_agent.pl
Log:
use Proc::ProcessTable and Proc::Killall from Daniel J. Urist
to kill all the build process. I'll have to package Proc::Killall.
Modified: svnbuildstat/trunk/script/svnbuildstat_agent.pl
===================================================================
--- svnbuildstat/trunk/script/svnbuildstat_agent.pl 2008-04-19 19:05:03 UTC (rev 802)
+++ svnbuildstat/trunk/script/svnbuildstat_agent.pl 2008-04-19 22:53:37 UTC (rev 803)
@@ -12,8 +12,8 @@
use HTTP::Request::Common;
use LWP::UserAgent;
use HTTP::Response;
+use Proc::ProcessTable;
-
###########################################################################
###########################################################################
###########################################################################
@@ -26,7 +26,7 @@
my %job;
#my $maxjobs = $config->agent_maxjobs;
-my $maxjobs = 1;
+my $maxjobs = 3;
my $vardir = "/home/goneri/svnbuildstat";
my $workplace = $vardir."/workplace";
my $pbuilderplace = $vardir."/pbuilder";
@@ -45,6 +45,41 @@
$ENV{LC_ALL} = 'C';
$ENV{LANG} = 'C';
+# From Proc::Killall TODO package this
+#Copyright (c) 1998-2006 Daniel J. Urist. All rights reserved.
+#This package is free software; you can redistribute it and/or modify
+#it under the same terms as Perl itself.
+sub get_pids {
+
+ my($procs, @kids) = @_;
+
+ my @pids;
+ foreach my $kid (@kids) {
+ foreach my $proc (@$procs) {
+ if ($proc->ppid == $kid) {
+ my $pid = $proc->pid;
+ push @pids, $pid, get_pids $procs, $pid;
+ }
+ }
+ }
+ @pids;
+
+}
+
+sub killfam {
+
+ my($signal, @pids) = @_;
+
+ my $pt = Proc::ProcessTable->new;
+ my(@procs) = @{$pt->table};
+ my(@kids) = get_pids \@procs, @pids;
+ @pids = (@pids, @kids);
+
+ kill $signal, @pids;
+
+} # end killfam
+
+
sub purge {
print "What a nice day for a purge!\n";
die "please create: `".$vardir unless -d $vardir;
@@ -92,12 +127,13 @@
print "checkSanity(): disk or memory full!!!\n";
if (%job&&(isDiskFull($workplace)||isDiskFull($buildarea))) {
print "Emergency clean up\n";
- foreach (keys %job) {
- kill 15, $_;
- }
+ killfam (15, keys %job);
+
sleep (60*3);
+
+ killfam (9, keys %job);
+
foreach (keys %job) {
- kill 9, $_;
waitpid($_, WNOHANG);
delete ($job{$_});
}
More information about the Collab-qa-commits
mailing list