[oe-commits] [bitbake] 04/23: daemonize: Various fixes

git at git.openembedded.org git at git.openembedded.org
Tue Jul 18 21:32:59 UTC 2017


This is an automated email from the git hooks/post-receive script.

rpurdie pushed a commit to branch master-next
in repository bitbake.

commit 2b1f4cd94268d1846059c6572a18bd7c86fb6838
Author: Richard Purdie <richard.purdie at linuxfoundation.org>
AuthorDate: Tue Jul 18 22:22:12 2017 +0100

    daemonize: Various fixes
    
    Currently if this code is used with something like oeqa's xml logging
    it fails as sys.stdout is an io stream. Add in try/except to handle
    this case.
    
    Add a waitpid() call to remove a zombie whilst forking.
    
    Also, append to the logfile, don't overwrite it (otherwise
    debugging can be a real pain when the server is restarting for
    unknown reasons).
    
    Signed-off-by: Richard Purdie <richard.purdie at linuxfoundation.org>
---
 lib/bb/daemonize.py | 20 ++++++++++++--------
 1 file changed, 12 insertions(+), 8 deletions(-)

diff --git a/lib/bb/daemonize.py b/lib/bb/daemonize.py
index ab4a954..8380828 100644
--- a/lib/bb/daemonize.py
+++ b/lib/bb/daemonize.py
@@ -29,6 +29,7 @@ __version__ = "0.2"
 # Standard Python modules.
 import os                    # Miscellaneous OS interfaces.
 import sys                   # System-specific parameters and functions.
+import io
 
 # Default daemon parameters.
 # File mode creation mask of the daemon.
@@ -124,6 +125,7 @@ def createDaemon(function, logfile):
         # streams to be flushed twice and any temporary files may be unexpectedly
         # removed.  It's therefore recommended that child branches of a fork()
         # and the parent branch(es) of a daemon use _exit().
+        os.waitpid(pid, 0)
         return
 
     # Close all open file descriptors.  This prevents the child from keeping
@@ -177,16 +179,18 @@ def createDaemon(function, logfile):
 #    os.dup2(0, 1)                      # standard output (1)
 #    os.dup2(0, 2)                      # standard error (2)
 
-
-    si = open('/dev/null', 'r')
-    so = open(logfile, 'w')
-    se = so
-
-
     # Replace those fds with our own
+    si = open('/dev/null', 'r')
     os.dup2(si.fileno(), sys.stdin.fileno())
-    os.dup2(so.fileno(), sys.stdout.fileno())
-    os.dup2(se.fileno(), sys.stderr.fileno())
+
+    try:
+        so = open(logfile, 'a+')
+        se = so
+        os.dup2(so.fileno(), sys.stdout.fileno())
+        os.dup2(se.fileno(), sys.stderr.fileno())
+    except io.UnsupportedOperation:
+        sys.stdout = open(logfile, 'a+')
+        sys.stderr = sys.stdout
 
     function()
 

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.


More information about the Openembedded-commits mailing list