Эх сурвалжийг харах

Recursively kill dangling child processes using pgrep

Junegunn Choi 12 жил өмнө
parent
commit
09b2080ddb
1 өөрчлөгдсөн 11 нэмэгдсэн , 1 устгасан
  1. 11 1
      plug.vim

+ 11 - 1
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!"]