#!/usr/bin/perl
use strict;

if ($#ARGV != 0) 
  {
  print "Usage: $0 username\n" ;
  exit(1);
  }
my $actuser = shift;
my $err = &killuser($actuser);
print "Code $err\n";
exit 0;

sub killuser # (user)
  {
  # Geht nur beim User root
  # Die folgende Zeile ist ggf. anzupassen
  # ps soll liefern: PID und USERNAME
  my $pscommand = 'ps -axo pid,user'; 
  my $user = $_[0];
  my @entry = ();
  my $name = '';
  my $pid = 0;
  my $line = '';
  my $signal = '';
  
  # Das Loeschen geschieht in drei Abstufungen:
  # erst ein TERM-Signal, dann ein HUP-Signal,
  # und zum Schluss fuer den Rest ein KILL-Signal:
  foreach $signal ("TERM","HUP","KILL")
    {
    print "Sending $signal signal to all processes ...\n";
    # Die Ausgabe des ps-Kommandos zeilenweise lesen und bearbeiten:
    open(PS, "$pscommand |");
    @entry = grep(/$user/,<PS>);
    close PS;
    return(0) if ($#entry == -1); 
    foreach $line (@entry)
      {
      chomp($line);        # Newline am Ende weg
      $line =~ s/  */ /g;  # Mehrfache Leerzeichen weg
      $line =~ s/^ *//g;   # Leerzeichen am Zeilenanfang weg
      ($pid,$name) = split(/ /,$line);
      print "$pid ";
      kill($signal,$pid);
      }
    print "\n"; 
    }
  return(0);	
  } 
