diff --git a/lib/god/process.rb b/lib/god/process.rb
index a03d2c3..5c02c23 100644
--- a/lib/god/process.rb
+++ b/lib/god/process.rb
@@ -193,7 +193,7 @@ module God
         command = lambda do
           applog(self, :info, "#{self.name} stop: default lambda killer")
           
-          ::Process.kill('TERM', pid) rescue nil
+          kill_pg('TERM', pid) rescue nil
           applog(self, :info, "#{self.name} sent SIGTERM")
           
           # Poll to see if it's dead
@@ -209,7 +209,7 @@ module God
             sleep 1
           end
           
-          ::Process.kill('KILL', pid) rescue nil
+          kill_pg('KILL', pid) rescue nil
           applog(self, :info, "#{self.name} still alive; sent SIGKILL")
         end
       end
@@ -327,7 +327,7 @@ module God
       end
       
       # last resort
-      ::Process.kill('KILL', self.pid) rescue nil
+      kill_pg('KILL', self.pid) rescue nil
       applog(self, :warn, "#{self.name} process still running 10 seconds after stop command returned. Force killing.")
     end
 
@@ -337,5 +337,12 @@ module God
 
       file.gsub(/^#{Regexp.escape(File.expand_path(self.chroot))}/, '')
     end
+    
+    def kill_pg(signal, pid)
+      process_group = ::Process.getpgid(pid)
+      # From http://www.ruby-doc.org/core/classes/Process.html, Process.kill(signal, pid, ...) => fixnum
+      # "If signal is negative (or starts with a minus sign), kills process groups instead of processes."
+      ::Process.kill(signal, -process_group)
+    end
   end
 end
