From: Horms <horms@verge.net.au>
To: xen-devel@lists.xensource.com
Subject: Re: [PATCH] setsid() exception in xend
Date: Mon, 28 Nov 2005 04:29:04 +0000 (UTC) [thread overview]
Message-ID: <dme12f$r1k$1@sea.gmane.org> (raw)
In-Reply-To: dm9hpf$jhr$1@sea.gmane.org
The previous patch was bogus, please ignore it.
This should be a bit better:
# HG changeset patch
# User Horms <horms@verge.net.au>
# Node ID 81daa5bcf2ee0a463755e7662606bb6650038f69
# Parent ed749e5935bd8dc283852f4064569415118deeaf
[xend] Detach from terminal
* For setsid to effectivley detach a process from the terminal,
the process must have forked.
Setsid is run in the child process.
The parent process manages the status fd, as per its behaviour in
self.start(), and exits when the fd handling is complete.
The output of ps axf verifies that xend and its subsequenbtly
created child processes are detached from the terminal.
* The call to self.daemonize(), which now forks, is moved to
run before self.tracing(), as not that it actually disconnects
from the terminal, and thus the prevailing process, the trace
looses the processes created in self.run().
diff -r ed749e5935bd -r 81daa5bcf2ee tools/python/xen/xend/server/SrvDaemon.py
--- a/tools/python/xen/xend/server/SrvDaemon.py Mon Nov 28 04:06:14 2005
+++ b/tools/python/xen/xend/server/SrvDaemon.py Mon Nov 28 04:16:03 2005
@@ -121,8 +121,28 @@
return self.child
- def daemonize(self):
+ def daemonize(self, status):
if not XEND_DAEMONIZE: return
+
+ # Fork to allow disconnection from TTY
+ r, w = os.pipe()
+ if self.fork_pid(XEND_PID_FILE):
+ os.close(w)
+ r = os.fdopen(r, 'r')
+ try:
+ s = r.read()
+ finally:
+ r.close()
+ if len(s):
+ status.write(s)
+ status.close()
+ self.exit()
+
+ # Child
+ os.close(r);
+ status.close();
+ status = os.fdopen(w, 'w')
+
# Detach from TTY.
os.setsid()
@@ -140,6 +160,8 @@
os.dup(0)
os.open(XEND_DEBUG_LOG, os.O_WRONLY|os.O_CREAT)
+ return status
+
def start(self, trace=0):
"""Attempts to start the daemons.
@@ -164,7 +186,7 @@
# we can avoid a race condition during startup
r,w = os.pipe()
- if self.fork_pid(XEND_PID_FILE):
+ if os.fork():
os.close(w)
r = os.fdopen(r, 'r')
try:
@@ -178,8 +200,9 @@
else:
os.close(r)
# Child
+ status = self.daemonize(os.fdopen(w, 'w'))
self.tracing(trace)
- self.run(os.fdopen(w, 'w'))
+ self.run(status)
return ret
@@ -274,7 +297,6 @@
relocate.listenRelocation()
servers = SrvServer.create()
- self.daemonize()
servers.start(status)
except Exception, ex:
print >>sys.stderr, 'Exception starting xend:', ex
next prev parent reply other threads:[~2005-11-28 4:29 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-11-26 11:43 [PATCH] setsid() exception in xend Horms
2005-11-28 4:29 ` Horms [this message]
2005-11-28 11:31 ` Ewan Mellor
2005-11-28 12:53 ` Horms
2005-11-28 13:37 ` Ewan Mellor
2005-11-28 13:58 ` Horms
2005-11-28 15:57 ` Ewan Mellor
2005-11-29 1:51 ` Horms
2005-11-30 2:34 ` Horms
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to='dme12f$r1k$1@sea.gmane.org' \
--to=horms@verge.net.au \
--cc=xen-devel@lists.xensource.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.