Fix crashing issue with signals TTIN and TTOU. Also clear out zombie procs left by those signals.

This commit is contained in:
Curt Micol 2010-01-10 07:08:05 -05:00
parent 7cf859a5c0
commit 7c30c1e9ae

View File

@ -205,7 +205,8 @@ class Arbiter(object):
self.kill_workers(signal.SIGKILL) self.kill_workers(signal.SIGKILL)
def murder_workers(self): def murder_workers(self):
for (pid, worker) in self.WORKERS.iteritems(): running_workers = tuple(self.WORKERS.iteritems())
for (pid, worker) in running_workers:
diff = time.time() - os.fstat(worker.tmp.fileno()).st_mtime diff = time.time() - os.fstat(worker.tmp.fileno()).st_mtime
if diff < self.timeout: if diff < self.timeout:
continue continue
@ -267,7 +268,10 @@ class Arbiter(object):
def kill_worker(self, pid, sig): def kill_worker(self, pid, sig):
worker = self.WORKERS.pop(pid) worker = self.WORKERS.pop(pid)
try: try:
os.kill(pid, sig) os.kill(pid, sig)
kpid, stat = os.waitpid(pid, os.WNOHANG)
if kpid:
log.warning("Problem killing process: %s" % pid)
except OSError, e: except OSError, e:
if e.errno == errno.ESRCH: if e.errno == errno.ESRCH:
pass pass