From: Heinz Diehl (hd_at_elfie.rhein-neckar.de)
Date: 19. Jun 1999
On Sat Jun 19 1999, Mark Seuffert (Pirates) wrote:
> > $pid =~ s/.*?([0-9]*).*/$1/; system("kill -9 $pid");
> Vielleicht ne andere RE (userame könnte Ziffern beinhalten)
Ja, haste Recht.
> und kill gibt's auch inline.
Ist aber ein bisschen "oversized" fuer ein paar Prozesse, oder ?
Du brauchst naemlich eine ganze Liste dafuer, da ist mir der
Shell-Aufruf lieber. Aber bitte sehr (aus dem Kopf, bitte testen) :)
--------------------------------->
#! /usr/local/bin/perl -w
die "Usage: $0 [signal to send]\n" if $#ARGV < 0;
@ps = `ps au`;
$dropit[0] = $ARGV[0];
foreach $line(@ps) {
if ($line =~ /^$username/) {
($pid = $line) =~ s/.*?\s+(.*?)\s+.*/$1/;
push(@dropit, $pid);
}
}
kill @dropit;
<---------------------------------
> open (PROCESS, "$ps_cmd |") || die ("Error opening '$ps_cmd': $!\n");
> while (<PROCESS>) {
> ($username,$pid) = /^(.*?)\s+(\d+)\s+.*/;
> print "$username, $pid\n";
> }
> close PROCESS || die "Error closing '$ps_cmd': $!\n";
Da steckt ein sehr haeufig gemachter Fehler drin, den man sich im
Umgang mit Pipes merken sollte:
Die die-Anweisung in der ersten Zeile (open ....) kann man sich
sparen, denn sie kommt niemals zur Ausfuehrung, da der open-Befehl
keinen Rueckgabewert liefert, falls der in der Pipe laufende
Befehl in der Shell einen Fehler verursacht.
Richtig ist die die-Anweisung in der letzten Zeile (close ....),
denn close liefert einen falschen Rueckgabewert falls die Ausfuehrung
der Pipe irgendwie auch immer fehlschlaegt.
"Error closing ...." trifft den Nagel nicht ganz auf den Kopf,
da der Fehler irgendwo bei der Ausfuehrung auftreten kann.
Dieses Archiv wurde generiert von hypermail 2.1.2 : 11. Mar 2002 CET