Author: arkurth
Date: Thu Jul 14 18:32:09 2016
New Revision: 1752718
URL: http://svn.apache.org/viewvc?rev=1752718&view=rev
Log:
VCL-965
Updated utils.pm::kill_child_processes to use ps instead of pgrep.
Modified:
vcl/trunk/managementnode/lib/VCL/utils.pm
Modified: vcl/trunk/managementnode/lib/VCL/utils.pm
URL:
http://svn.apache.org/viewvc/vcl/trunk/managementnode/lib/VCL/utils.pm?rev=1752718&r1=1752717&r2=1752718&view=diff
==============================================================================
--- vcl/trunk/managementnode/lib/VCL/utils.pm (original)
+++ vcl/trunk/managementnode/lib/VCL/utils.pm Thu Jul 14 18:32:09 2016
@@ -11400,7 +11400,7 @@ EOF
sub kill_child_processes {
my @parent_pids = @_;
my $parent_pid = $parent_pids[-1];
- my $parent_process_string = "parent PID: " . join(">", @parent_pids);
+ my $parent_process_string = "parent PID: " . join(" > ", @parent_pids);
# Make sure the parent vcld daemon process didn't call this subroutine
for safety
# Prevents all reservations being processed from being killed
@@ -11411,25 +11411,27 @@ sub kill_child_processes {
notify($ERRORS{'DEBUG'}, 0, "$parent_process_string: attempting to kill
child processes");
- my $command = "pgrep -flP $parent_pid | sort -r";
+ my $command = "ps -h --ppid $parent_pid -o pid,ppid,args | sort -r";
my ($exit_status, $output) = run_command($command, 1);
-
for my $line (@$output) {
# Make sure the line only contains a PID
- my ($child_pid, $child_command) = $line =~ /^(\d+)\s+(.*)/;
- if (!defined($child_pid) || !defined($child_command)) {
- notify($ERRORS{'WARNING'}, 0, "$parent_process_string:
pgrep output line does not contain a PID and command:\nline:
'$child_pid'\ncommand: '$command'");
+ my ($child_pid, $parent_pid, $child_command) = $line =~
/^(\d+)\s+(\d+)\s+(.*)/;
+ if (!defined($child_pid)) {
+ notify($ERRORS{'WARNING'}, 0, "$parent_process_string:
output line does not contain a PID:\nline: '$line'");
next;
}
elsif ($child_command =~ /$command/) {
# Ignore the pgrep command called to determine child
processes
+ notify($ERRORS{'DEBUG'}, 0, "ignoring process created
by this subroutine: '$line'");
+ next;
+ }
+ elsif ($child_command =~ /ssh -e none/) {
+ # Ignore SSH sessions created for execute_new
+ notify($ERRORS{'DEBUG'}, 0, "ignoring persistent SSH
process: '$line'");
next;
}
- # Create a string containing the beginning and end of the child
process command to make log output more readable
- my $child_command_summary = join('...', ($child_command =~
/^(.{10,20}).*(.{20,30})$/));
-
- notify($ERRORS{'DEBUG'}, 0, "$parent_process_string, found
child process: $child_pid '$child_command_summary'");
+ notify($ERRORS{'DEBUG'}, 0, "$parent_process_string, found
child process: '$line'");
# Recursively kill the child processes of the child process
kill_child_processes(@parent_pids, $child_pid);
@@ -11442,7 +11444,6 @@ sub kill_child_processes {
notify($ERRORS{'WARNING'}, 0, "$parent_process_string,
kill command returned 0 attempting to kill child process: $child_pid");
}
}
-
return 1;
}