All of lore.kernel.org
 help / color / mirror / Atom feed
From: Anthony Liguori <aliguori@us.ibm.com>
To: xen-devel@lists.xensource.com
Subject: Re: [Xen-changelog] Detach Xend from terminal, courtesy of Horms <horms@verge.net.au>.
Date: Fri, 09 Dec 2005 14:47:43 -0600	[thread overview]
Message-ID: <4399ED6F.1050500@us.ibm.com> (raw)
In-Reply-To: <E1EkjTm-0004PC-NQ@xenbits.xensource.com>

Sorry I missed this on Xen devel, but could someone explain this patch a 
little more.  The old behavior purposefully delayed the terminal 
detaching until Xend was ready to accept connections.  This is necessary 
to avoid a race condition with executing the first xm command after a 
xend start.

I don't quite understand why two fork()s would be required to properly 
daemonize.  I don't know of any other daemons that do that (certainly, 
xenstored and xenconsoled don't).

I could be missing something so if someone could clarify I'd greatly 
appreciate it.

Thanks,

Anthony Liguori



Xen patchbot -unstable wrote:

># HG changeset patch
># User emellor@leeni.uk.xensource.com
># Node ID efc71a3e9f6f7487ad349677369d6221a06ead3f
># Parent  52f214d983fb3edf2e265984ed9fe103dd7d2440
>Detach Xend from terminal, courtesy of Horms <horms@verge.net.au>.
>
>* For setsid to effectively detach a process from the terminal,
>  the following needs to occur:
>
>    fork ()   Return control to the shell
>    setsid () New session with no controlling terminal
>    fork ()   The session leader (parent) exits and thus
>              the resulting child process can never regain the terminal
>
>  This patch adds the second fork
>
>* The call to self.daemonize(), which now forks, is moved to
>  run before self.tracing(), as now that it actually disconnects
>  from the terminal, and thus the prevailing process, the trace
>  loses the processes created in self.run().
>
>Signed-off-by: Ewan Mellor <ewan@xensource.com>
>
>diff -r 52f214d983fb -r efc71a3e9f6f tools/python/xen/xend/server/SrvDaemon.py
>--- a/tools/python/xen/xend/server/SrvDaemon.py	Thu Dec  8 16:11:48 2005
>+++ b/tools/python/xen/xend/server/SrvDaemon.py	Thu Dec  8 16:17:53 2005
>@@ -123,9 +123,18 @@
> 
>     def daemonize(self):
>         if not XEND_DAEMONIZE: return
>+ 
>         # Detach from TTY.
>+
>+        # Become the group leader (already a child process)
>         os.setsid()
> 
>+        # Fork, this allows the group leader to exit,
>+        # which means the child can never again regain control of the
>+        # terminal
>+        if self.fork_pid(XEND_PID_FILE):
>+            self.exit()
>+ 
>         # Detach from standard file descriptors, and redirect them to
>         # /dev/null or the log as appropriate.
>         os.close(0)
>@@ -164,7 +173,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,6 +187,7 @@
>         else:
>             os.close(r)
>             # Child
>+            self.daemonize()
>             self.tracing(trace)
>             self.run(os.fdopen(w, 'w'))
> 
>@@ -274,7 +284,6 @@
> 
>             relocate.listenRelocation()
>             servers = SrvServer.create()
>-            self.daemonize()
>             servers.start(status)
>         except Exception, ex:
>             print >>sys.stderr, 'Exception starting xend:', ex
>
>_______________________________________________
>Xen-changelog mailing list
>Xen-changelog@lists.xensource.com
>http://lists.xensource.com/xen-changelog
>
>  
>

       reply	other threads:[~2005-12-09 20:47 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <E1EkjTm-0004PC-NQ@xenbits.xensource.com>
2005-12-09 20:47 ` Anthony Liguori [this message]
2005-12-09 21:15   ` Re: [Xen-changelog] Detach Xend from terminal, courtesy of Horms <horms@verge.net.au> Kip Macy
2005-12-09 21:16   ` Ewan Mellor
2005-12-09 21:35     ` Anthony Liguori
2005-12-12 15:12       ` Ewan Mellor

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=4399ED6F.1050500@us.ibm.com \
    --to=aliguori@us.ibm.com \
    --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.