#!/usr/bin/perl #Murder: Version .4.2 #Written by Star Simpson #Last Update: 081604 14:00 #Latest Updates: #CL-version use strict; use vars qw($process); $process = shift; if ($process) { search($process); } else { print "What process?\n"; $process=; chomp($process); search($process); } #search for PIDs by passing to name fragment to ps and grep sub search { my $keyword = $process; my @processes = `ps -acxww -o pid,command | grep -ie $keyword`; #print "@processes"; (legacy) if(@processes) { #if more than one match exists: if(@processes > 1) { if(@processes[0] =~ /PID/) { shift @processes; } #print a list of possible jobs to kill, with line numbering print "Ambiguous result.\n Please choose between:\n"; my $i = 1; foreach my $process (@processes) { print "$i $process"; $i++; } print "Enter a line number or \"all\" for all (enter \"quit\" to cancel)\n"; my $line = ; chomp($line); if ($line eq "quit") { die "...Quitting...\n"; } elsif ($line eq "all") { foreach my $process (@processes) { assasinate($process);} } else { #there should be some sort of code here to ensure that $line is a number $process = @processes[$line-1]; assasinate($process);} } #if only one match exists, kill it. elsif(@processes = 1) { $process = `ps -acxww -o pid,command | grep -ie $keyword`; assasinate($process); } else { die "Unknown result.\n"; } } else { die "No matches\n"; } } sub assasinate { #get name output my $name = shift @_; #Find the process, format, and harvest PID $_ = $name; /(\d+)/; chomp($name); #Commit the slaying ;) `kill -9 $1`; #match non-digits -- strip PID off, leaving name for pretty output my $realname = $name; $realname =~ s/\d+//; $realname =~ s/\s+//; print "$realname was killed\n"; }