Use :pgroup option when starting subprocesses
This makes it easier and faster to kill spawned git processes. Repetitive `pgrep` command for collecting PIDs is no longer required. Unfortunately, :pgroup option is not supported on Ruby 1.8 so we can't remove the old implementation of `killall`.
This commit is contained in:
parent
4a96db8971
commit
308fb9bc94
1 changed files with 28 additions and 15 deletions
43
plug.vim
43
plug.vim
|
@ -1003,23 +1003,36 @@ function! s:update_ruby()
|
||||||
%["#{arg.gsub('"', '\"')}"]
|
%["#{arg.gsub('"', '\"')}"]
|
||||||
end
|
end
|
||||||
|
|
||||||
def killall pid
|
require 'rubygems'
|
||||||
pids = [pid]
|
|
||||||
unless `which pgrep 2> /dev/null`.empty?
|
|
||||||
children = pids
|
|
||||||
until children.empty?
|
|
||||||
children = children.map { |pid|
|
|
||||||
`pgrep -P #{pid}`.lines.map { |l| l.chomp }
|
|
||||||
}.flatten
|
|
||||||
pids += children
|
|
||||||
end
|
|
||||||
end
|
|
||||||
pids.each { |pid| Process.kill 'TERM', pid.to_i rescue nil }
|
|
||||||
end
|
|
||||||
|
|
||||||
require 'thread'
|
require 'thread'
|
||||||
require 'fileutils'
|
require 'fileutils'
|
||||||
require 'timeout'
|
require 'timeout'
|
||||||
|
|
||||||
|
if Gem::Version.new(RUBY_VERSION) >= Gem::Version.new('1.9')
|
||||||
|
def popen cmd
|
||||||
|
IO.popen(cmd, :pgroup => true)
|
||||||
|
end
|
||||||
|
def killall pid
|
||||||
|
Process.kill 'TERM', - pid rescue nil
|
||||||
|
end
|
||||||
|
else
|
||||||
|
def popen cmd
|
||||||
|
IO.popen(cmd)
|
||||||
|
end
|
||||||
|
def killall pid
|
||||||
|
pids = [pid]
|
||||||
|
unless `which pgrep 2> /dev/null`.empty?
|
||||||
|
children = pids
|
||||||
|
until children.empty?
|
||||||
|
children = children.map { |pid|
|
||||||
|
`pgrep -P #{pid}`.lines.map { |l| l.chomp }
|
||||||
|
}.flatten
|
||||||
|
pids += children
|
||||||
|
end
|
||||||
|
end
|
||||||
|
pids.each { |pid| Process.kill 'TERM', pid.to_i rescue nil }
|
||||||
|
end
|
||||||
|
end
|
||||||
running = true
|
running = true
|
||||||
iswin = VIM::evaluate('s:is_win').to_i == 1
|
iswin = VIM::evaluate('s:is_win').to_i == 1
|
||||||
pull = VIM::evaluate('s:update.pull').to_i == 1
|
pull = VIM::evaluate('s:update.pull').to_i == 1
|
||||||
|
@ -1086,7 +1099,7 @@ function! s:update_ruby()
|
||||||
File.unlink tmp rescue nil
|
File.unlink tmp rescue nil
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
fd = IO.popen(cmd).extend(PlugStream)
|
fd = popen(cmd).extend(PlugStream)
|
||||||
first_line = true
|
first_line = true
|
||||||
log_prob = 1.0 / nthr
|
log_prob = 1.0 / nthr
|
||||||
while line = Timeout::timeout(timeout) { fd.get_line }
|
while line = Timeout::timeout(timeout) { fd.get_line }
|
||||||
|
|
Loading…
Reference in a new issue