From 42dbf468b2782886227e51248d03d9f999311520 Mon Sep 17 00:00:00 2001 From: Pragmatic Software Date: Fri, 14 Feb 2020 19:58:44 -0800 Subject: [PATCH] ProcessManager: add `kill` command --- PBot/ProcessManager.pm | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/PBot/ProcessManager.pm b/PBot/ProcessManager.pm index bb2a31a3..3d15d2d1 100644 --- a/PBot/ProcessManager.pm +++ b/PBot/ProcessManager.pm @@ -35,7 +35,7 @@ sub ps_cmd { push @processes, "$pid: $self->{processes}->{$pid}->{commands}->[0]"; } if (@processes) { - return "Running processes: ", join '; ', @processes; + return "Running processes: " . join '; ', @processes; } else { return "No running processes."; } @@ -43,7 +43,21 @@ sub ps_cmd { sub kill_cmd { my ($self, $from, $nick, $user, $host, $arguments, $stuff) = @_; - return "Coming soon."; + my $usage = "Usage: kill "; + + my @pids; + while (1) { + my $pid = $self->{pbot}->{interpreter}->shift_arg($stuff->{arglist}) // last; + push @pids, $pid; + } + return $usage if not @pids; + + foreach my $pid (@pids) { + return "No such pid $pid." if not exists $self->{processes}->{$pid}; + } + + kill 'INT', @pids; + return "Killed."; } sub add_process { @@ -62,6 +76,10 @@ sub execute_subroutine { sub execute_process { my ($self, $stuff, $subref) = @_; + if (not exists $stuff->{commands}) { + $stuff->{commands} = [ $stuff->{command} ]; + } + pipe(my $reader, my $writer); my $pid = fork;