Recursively kill dangling child processes using pgrep
This commit is contained in:
parent
3a4ffb49e9
commit
09b2080ddb
1 changed files with 11 additions and 1 deletions
12
plug.vim
12
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!"]
|
||||
|
|
Loading…
Reference in a new issue