diff --git a/OpenSim/Server/Base/ServicesServerBase.cs b/OpenSim/Server/Base/ServicesServerBase.cs
index f60b5fb6dc..d151de663e 100644
--- a/OpenSim/Server/Base/ServicesServerBase.cs
+++ b/OpenSim/Server/Base/ServicesServerBase.cs
@@ -61,6 +61,9 @@ namespace OpenSim.Server.Base
//
private bool m_Running = true;
+ private static Mono.Unix.UnixSignal[] signals;
+
+
// Handle all the automagical stuff
//
public ServicesServerBase(string prompt, string[] args) : base()
@@ -183,6 +186,39 @@ namespace OpenSim.Server.Base
RegisterCommonCommands();
RegisterCommonComponents(Config);
+ Thread signal_thread = new Thread (delegate ()
+ {
+ while (true)
+ {
+ // Wait for a signal to be delivered
+ int index = Mono.Unix.UnixSignal.WaitAny (signals, -1);
+
+ //Mono.Unix.Native.Signum signal = signals [index].Signum;
+ ShutdownSpecific();
+ m_Running = false;
+ Environment.Exit(0);
+ }
+ });
+
+ if(!Util.IsWindows())
+ {
+ try
+ {
+ // linux mac os specifics
+ signals = new Mono.Unix.UnixSignal[]
+ {
+ new Mono.Unix.UnixSignal(Mono.Unix.Native.Signum.SIGTERM)
+ };
+ signal_thread.Start();
+ }
+ catch (Exception e)
+ {
+ m_log.Info("Could not set up UNIX signal handlers. SIGTERM will not");
+ m_log.InfoFormat("shut down gracefully: {0}", e.Message);
+ m_log.Debug("Exception was: ", e);
+ }
+ }
+
// Allow derived classes to perform initialization that
// needs to be done after the console has opened
Initialise();
diff --git a/prebuild.xml b/prebuild.xml
index cb39e18e16..fddbca3286 100644
--- a/prebuild.xml
+++ b/prebuild.xml
@@ -497,6 +497,7 @@
+