#!/usr/local/bin/perl use warnings; use strict; use IO::Handle; my $amavisd = '/usr/local/sbin/amavisd'; my $amavisd_conf = '/usr/local/etc/amavisd.conf'; my @amavisd_flags = (); my $amavisd_pid = '/var/amavis/amavisd.pid'; my $fd3 = IO::Handle->new_from_fd(3, "r"); system ($amavisd, '-c', $amavisd_conf, @amavisd_flags); $fd3->close() if $fd3; while (<>) {} if (open (PID, $amavisd_pid)) { my $pid = ; close PID; chomp $pid; my %signo = get_sigs('name'); kill ($signo{TERM}, $pid) or die "Can't kill: $!"; } else { system ("kill `cat $amavisd_pid`"); } exit; sub get_sigs { use Config; # name or number my $type = shift || 'name'; my %signo = (); my @signame = (); defined $Config{sig_name} || die "No sigs?"; my $i = 0; foreach my $name (split(' ', $Config{sig_name})) { $signo{$name} = $i; $signame[$i] = $name; $i++; } if ($type eq 'name') { return %signo; } else { return @signame; } }