import sys
 import os
+import signal
 import hashlib
 from oslo_config import cfg
 from oslo_log import log as logging
 #     env = Environment(loader=simple_loader)
 #     return env.get_template(filename)
 
+def kill_handler(signum, frame):
+    _exit(0)
+
 
 def create_docker_network(name="moon"):
 
             docker.remove_container(container=component_id)
 
 
-def _exit(exit_number=0, docker=None, error=None):
+def _exit(exit_number=0, error=None):
     for _container in CONTAINERS:
         LOG.warning("Deleting containers named {}...".format(_container))
         # print(40 * "-" + _container)
         open("/var/run/moon_orchestrator.pid", "w").write(str(os.getpid()))
     except PermissionError:
         LOG.warning("You don't have the right to write PID file in /var/run... Continuing anyway.")
+        open("./moon_orchestrator.pid", "w").write(str(os.getpid()))
 
 
-def main():
+def server():
     # conf_file = options.configure(DOMAIN)
     __save_pid()
     LOG.info("Starting server with IP {}".format(CONF.orchestrator.host))
         router.get_status()
     except oslo_messaging.rpc.client.RemoteError as e:
         LOG.error("Cannot check status of remote container!")
-        _exit(1, docker, e)
+        _exit(1, e)
     serv = messenger.Server(containers=CONTAINERS, docker_manager=docker_manager, slaves=SLAVES)
     try:
         serv.run()
     finally:
-        _exit(0, docker)
+        _exit(0)
+
+
+def main():
+    signal.signal(signal.SIGTERM, kill_handler)
+    signal.signal(signal.SIGHUP, kill_handler)
+    newpid = os.fork()
+    if newpid == 0:
+        server()
 
 
 if __name__ == '__main__':