http://qs1969.pair.com?node_id=121800


in reply to Re: Logging out
in thread Logging out

As I'm a great proponent of implementing in Perl rather than relying on external programs, I came up with the following more generic code which is a bit cleaner in that it doesn't depend on the external execution of ps :

sub killchd ($;$) { use Proc::ProcessTable; my $sig = ($_[1] =~ /^\-?\d+$/) ? $_[1] : 0; my $proc = Proc::ProcessTable->new; my %fields = map { $_ => 1 } $proc->fields; return undef unless exists $fields{'ppid'}; foreach (@{$proc->table}) { kill $sig, $_->pid if ($_->ppid == $_[0]); }; kill $sig, $_[0]; };

This subroutine takes two arguments, the parent process ID and the numeric signal to pass to the processes (which would be 9 if you wanted to issue a -TERM). Using Proc::Process you could find the process ID of the process login -- mrc with something similar to the following :

my $proc = Proc::ProcessTable->new; my @ps = map { $_->pid if ($_->cmndline =~ /login -- mrc/) } @{$proc-> +table}; &killchd($_, 9) foreach @ps;

 

Ooohhh, Rob no beer function well without!

Replies are listed 'Best First'.
Re: Re: Re: Logging out
by Dr. Mu (Hermit) on Oct 30, 2001 at 08:36 UTC
    Yes, I like that much better. Thanks!