diff --git a/plug.vim b/plug.vim index f70751d..18e3509 100644 --- a/plug.vim +++ b/plug.vim @@ -380,7 +380,17 @@ function! s:update_parallel(pull, threads) end rescue Timeout::Error, Interrupt => e if fd && !fd.closed? - Process.kill 'KILL', fd.pid + pids = [fd.pid] + unless `which pgrep`.empty? + children = pids + while !children.empty? + children = children.map { |pid| + `pgrep -P #{pid}`.lines.map(&:chomp) + }.flatten + pids += children + end + end + pids.each { |pid| Process.kill 'TERM', pid.to_i rescue nil } fd.close end [false, e.is_a?(Interrupt) ? "Interrupted!" : "Timeout!"]