[Zodb-checkins] CVS: ZODB3/zdaemon - zdrun.py:1.13.16.4
Jeremy Hylton
jeremy at zope.com
Fri Sep 19 17:02:55 EDT 2003
Update of /cvs-repository/ZODB3/zdaemon
In directory cvs.zope.org:/tmp/cvs-serv11418/zdaemon
Modified Files:
Tag: Zope-2_7-branch
zdrun.py
Log Message:
Restore comment deleted by the merge of ZODB3-3_2-branch.
=== ZODB3/zdaemon/zdrun.py 1.13.16.3 => 1.13.16.4 ===
--- ZODB3/zdaemon/zdrun.py:1.13.16.3 Mon Sep 15 17:26:59 2003
+++ ZODB3/zdaemon/zdrun.py Fri Sep 19 17:02:54 2003
@@ -317,6 +317,28 @@
self.waitstatus = pid, sts
def daemonize(self):
+
+ # To daemonize, we need to become the leader of our own session
+ # (process) group. If we do not, signals sent to our
+ # parent process will also be sent to us. This might be bad because
+ # signals such as SIGINT can be sent to our parent process during
+ # normal (uninteresting) operations such as when we press Ctrl-C in the
+ # parent terminal window to escape from a logtail command.
+ # To disassociate ourselves from our parent's session group we use
+ # os.setsid. It means "set session id", which has the effect of
+ # disassociating a process from is current session and process group
+ # and setting itself up as a new session leader.
+ #
+ # Unfortunately we cannot call setsid if we're already a session group
+ # leader, so we use "fork" to make a copy of ourselves that is
+ # guaranteed to not be a session group leader.
+ #
+ # We also change directories, set stderr and stdout to null, and
+ # change our umask.
+ #
+ # This explanation was (gratefully) garnered from
+ # http://www.hawklord.uklinux.net/system/daemons/d3.htm
+
pid = os.fork()
if pid != 0:
# Parent
@@ -563,7 +585,7 @@
"backoff=%r\n" % self.backoff +
"lasttime=%r\n" % self.proc.lasttime +
"application=%r\n" % self.proc.pid +
- "manager=%r\n" % os.getpid() +
+ "manager=%r\n" % os.getpid() +
"backofflimit=%r\n" % self.options.backofflimit +
"filename=%r\n" % self.proc.filename +
"args=%r\n" % self.proc.args)
@@ -631,7 +653,7 @@
def decode_wait_status(sts):
"""Decode the status returned by wait() or waitpid().
-
+
Return a tuple (exitstatus, message) where exitstatus is the exit
status, or -1 if the process was killed by a signal; and message
is a message telling what happened. It is the caller's
@@ -689,9 +711,9 @@
return path
# Main program
-
def main(args=None):
assert os.name == "posix", "This code makes many Unix-specific assumptions"
+
zLOG.initialize()
d = Daemonizer()
d.main(args)
More information about the Zodb-checkins
mailing list