mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 10:11:27 +01:00
bitkeeper revision 1.1159.79.1 (414b5fab__RjPaRIcKFGQmiG7K6ggA)
SrvDaemon.py, xend: Xend daemonization fixes from Charles Coffing.
This commit is contained in:
1 parent
9976050eca
commit
90d122ec63
3 files changed
+41
-12
No files matched your search
@@ -42,7 +42,7 @@ import console
|
||||
import domain
|
||||
from params import *
|
||||
|
||||
DEBUG = 1
|
||||
DEBUG = 0
|
||||
|
||||
class NotifierProtocol(protocol.Protocol):
|
||||
"""Asynchronous handler for i/o on the notifier (event channel).
|
||||
@@ -419,6 +419,18 @@ class Daemon:
|
||||
self.cleanup_xend(kill=kill)
|
||||
self.cleanup_xfrd(kill=kill)
|
||||
|
||||
def status(self):
|
||||
"""Returns the status of the xend and xfrd daemons.
|
||||
The return value is defined by the LSB:
|
||||
0 Running
|
||||
3 Not running
|
||||
"""
|
||||
if (self.cleanup_process(XEND_PID_FILE, "xend", False) == 0 or
|
||||
self.cleanup_process(XFRD_PID_FILE, "xfrd", False) == 0):
|
||||
return 3
|
||||
else:
|
||||
return 0
|
||||
|
||||
def install_child_reaper(self):
|
||||
#signal.signal(signal.SIGCHLD, self.onSIGCHLD)
|
||||
# Ensure that zombie children are automatically reaped.
|
||||
@@ -451,22 +463,36 @@ class Daemon:
|
||||
pass
|
||||
else:
|
||||
# Child
|
||||
self.set_user()
|
||||
os.execl("/usr/sbin/xfrd", "xfrd")
|
||||
|
||||
def start(self, trace=0):
|
||||
"""Attempts to start the daemons.
|
||||
The return value is defined by the LSB:
|
||||
0 Success
|
||||
4 Insufficient privileges
|
||||
"""
|
||||
xend_pid = self.cleanup_xend()
|
||||
xfrd_pid = self.cleanup_xfrd()
|
||||
if xfrd_pid == 0:
|
||||
self.start_xfrd()
|
||||
if xend_pid > 0:
|
||||
return 1
|
||||
|
||||
# Detach from TTY.
|
||||
if not DEBUG:
|
||||
os.setsid()
|
||||
sys.stdin.close();
|
||||
sys.stdout.close();
|
||||
sys.stderr.close();
|
||||
os.close(0);
|
||||
os.close(1);
|
||||
os.close(2);
|
||||
if self.set_user():
|
||||
return 1
|
||||
return 4
|
||||
os.chdir("/")
|
||||
|
||||
if xfrd_pid == 0:
|
||||
self.start_xfrd()
|
||||
if xend_pid > 0:
|
||||
# Trying to run an already-running service is a success.
|
||||
return 0
|
||||
|
||||
self.install_child_reaper()
|
||||
|
||||
if self.fork_pid(XEND_PID_FILE):
|
||||
|
||||