Date: Mon, 12 Jun 1995 21:27:55 +0200 From: Wolfram Schneider <wosch@cs.tu-berlin.de> To: current@FreeBSD.ORG Subject: killall Message-ID: <199506121927.VAA15888@ole.cs.tu-berlin.de>
next in thread | raw e-mail | index | archive | help
I miss the killall program like in Linux or Irix. Here is a little perl hack. #!/usr/bin/perl # # killall - kill all processes # # Note: work only with effective uid due the limit of procfs # (eg. not with suid programs) $ENV{'PATH'} = "/bin:/usr/bin"; $procfs = '/proc'; $signal = 'SIGTERM'; # default signal for kill $debug = 0; $PROC_NAME = 0 + $[; $PROC_RUID = 11 + $[; $PROC_REST = 12 + $[; sub usage { die "killall [-v] [-?|-help] [-l] [-SIGNAL] program\n"; } while ($_ = $ARGV[0], /^-/) { shift @ARGV; if (/^--$/) { $_ = $ARGV[0]; last } elsif (/^-v$/) { $debug = 1 } elsif (/^-(h|help|\?)$/) { do usage } elsif (/^-l$/) { exec 'kill', '-l' } elsif (/^-([A-Za-z]+|[0-9]+)$/) { $signal = $1 } } $program = $_; &usage unless $program; die "Maybe $procfs is not mounted\n" unless -e "$procfs/0/status"; while(<$procfs/[0-9]*>) { $file = "$_/status"; ($pid = $_) =~ s=^$procfs/==; next if $pid == $$; # don't kill yourself open(P, "$file") || next; # process maybe already terminated while(<P>) { @proc = split; print "$pid $proc[$PROC_NAME] $proc[$PROC_RUID]\n" if $debug > 0; push(@kill, "$pid") if ($proc[$PROC_NAME] eq $program && $proc[$PROC_RUID] eq $<); } close P; } exit(1) if $#kill < 0; # nothing found $signal =~ y/[a-z]/[A-Z]/; # signal name in upper case print "kill $signal @kill\n" if $debug; kill ($signal, @kill); # end
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199506121927.VAA15888>