Skip to content

Instantly share code, notes, and snippets.

@sgirones
Last active August 29, 2015 14:19
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save sgirones/b1f9134e3f3598935fec to your computer and use it in GitHub Desktop.
Save sgirones/b1f9134e3f3598935fec to your computer and use it in GitHub Desktop.
Clean leaked Docker processes
#!/usr/bin/env ruby
# Clean all those processes that belongs to a Docker namespace, but that container no longer exists
def all_procs
Dir['/proc/*'].select {|d| /\/proc\/\d+/.match(d) }.map { |pdir| pdir.split('/')[-1].to_i }
end
def docker_procs
all_procs.select { |p| File.read('/proc/' + p.to_s + '/cgroup').include? 'docker' }
end
def leaked_docker_procs
docker_procs.select do |p|
container = File.read('/proc/' + p.to_s + '/cgroup').split('/')[-1].chomp
!system("docker inspect #{container} 2>&1 >/dev/null")
end
end
if leaked_docker_procs.none?
puts "No leaked Docker processes"
exit(0)
end
# Term them all
leaked_docker_procs.each do |p|
puts "Sent TERM signal to #{p}"
Process.kill('TERM', p)
end
sleep 10
# Kill them all
leaked_docker_procs.each do |p|
puts "Sent KILL signal to #{p}"
Process.kill('KILL', p)
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment