Date: Sat, 27 May 2000 09:09:06 -0700 From: Cy Schubert - ITSD Open Systems Group <Cy.Schubert@uumail.gov.bc.ca> To: Brian Somers <brian@Awfulhak.org> Cc: John Baldwin <jhb@FreeBSD.ORG>, Randall Hopper <aa8vb@nc.rr.com>, stable@FreeBSD.ORG, housley@thehousleys.net, brian@hak.lan.Awfulhak.org Subject: Re: killall question Message-ID: <200005271609.e4RG9cA94703@cwsys.cwsent.com> In-Reply-To: Your message of "Sat, 27 May 2000 16:46:26 BST." <200005271546.QAA64909@hak.lan.Awfulhak.org>
next in thread | previous in thread | raw e-mail | index | archive | help
In message <200005271546.QAA64909@hak.lan.Awfulhak.org>, Brian Somers
writes:
> >
> > On 27-May-00 Randall Hopper wrote:
> > > housley@thehousleys.net:
> > > |Randall Hopper <aa8vb@nc.rr.com> said:
> > > |
> > > |> I have a script I run named "newroot". I want to kill it with killal
> l.
> > > |>
> > > |> > ps -ax | grep newroot
> > > |> 842 1 rhh /bin/sh /home/rhh/bin/newroot 360
> > > |>
> > > |You will have to do something like
> > > |
> > > |kill `ps -ax | grep newroot | sed -e '^[0-9]*'`
> > >
> > > Ok. I thought I'd at least try to use the system version, but sounds lik
> e
> > > it's just not as flexible as killall's on other systems.
> > >
> > > Here's the shell script I settled on to override the default /usr/bin/kil
> lall:
> > >
> > > ps -x | grep "$1" | egrep -v "grep|$0" | awk '{print $1;}'
> >
> > % killall grep
>
> # killall grepscript
>
> There are bad sub-string implications there too....
Here's a killall script I picked up from somewhere about 6-7 years ago
(author unknown). I won't take credit for writing it, though I have
modified it a little. The advantage over the FreeBSD and Linux killall
is that it's portable to any platform.
I've been using a version of this script for over 6 years on Solaris to
kill a an application that won't clean up after itself properly.
#!/usr/bin/perl
# Usage: zap [-signal] pattern
# Configuration parameters.
$ENV{'PATH'}='/usr/bin:/bin:/usr/local/bin:/usr/sbin:/sbin';
$sig = 'TERM';
$BSD = -f '/vmunix' || -f '/kernel';
$pscmd = $BSD ? "ps -auxww" : "ps -ef";
$IA = 0;
$IA = 1 if ( $0 !~ /zapall/ );
$QUIET = 0;
if ($IA) {
open(TTYIN, "</dev/tty") || die "can't read /dev/tty: $!";
open(TTYOUT, ">/dev/tty") || die "can't write /dev/tty: $!";
select(TTYOUT);
$| = 1;
select(STDOUT);
$SIG{'INT'} = 'cleanup';
}
if ($#ARGV >= $[ && $ARGV[0] =~ /^-/) {
if ($ARGV[0] =~ /-q$/ || $ARGV[0] =~ /-quiet$/) {
$QUIET = 1;
} elsif ($ARGV[0] =~ /-(\w+)$/) {
$sig = $1;
} else {
print STDERR "$0: illegal argument $ARGV[0] ignored\n";
}
shift;
}
if ($IA) {
if ($BSD) {
system "stty cbreak </dev/tty >/dev/tty 2>&1";
}
else {
system "stty", 'cbreak',
system "stty", 'eol', '^A';
}
}
open(PS, "$pscmd|") || die "can't run $pscmd: $!";
$title = <PS>;
if ($IA) {
print TTYOUT $title;
}
# Catch any errors with eval. A bad pattern, for instance.
eval <<'EOF';
while ($cand = <PS>) {
chop($cand);
($user, $pid) = split(' ', $cand);
next if $pid == $$;
$found = !@ARGV;
foreach $pat (@ARGV) {
$found = 1 if $cand =~ $pat;
}
next if (!$found);
if ($IA) {
print TTYOUT "$cand ? ";
read(TTYIN, $ans, 1);
print TTYOUT "\n" if ($ans ne "\n");
if ($ans =~ /^y/i) { kill $sig, $pid; }
if ($ans =~ /^q/i) { last; }
} else {
kill $sig, $pid;
if ($QUIET != 1) { print "Sending signal $sig to PID $pid\n"; }
}
}
EOF
if ($IA) {
&cleanup;
}
sub cleanup {
if ($BSD) {
system "stty -cbreak </dev/tty >/dev/tty 2>&1";
}
else {
system "stty", 'icanon';
system "stty", 'eol', '^@';
}
print "\n";
exit;
}
Regards, Phone: (250)387-8437
Cy Schubert Fax: (250)387-5766
Team Leader, Sun/DEC Team Internet: Cy.Schubert@osg.gov.bc.ca
Open Systems Group, ITSD, ISTA
Province of BC
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-stable" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200005271609.e4RG9cA94703>
