diff --git a/tools/asp_state/Makefile.am b/tools/asp_state/Makefile.am index 0391ba0b..3ee78a20 100644 --- a/tools/asp_state/Makefile.am +++ b/tools/asp_state/Makefile.am @@ -1,4 +1,4 @@ -MCSFLAGS= -debug+ -debug:full -nologo +MCSFLAGS= -debug+ -debug:full -nologo -r:Mono.Posix.dll if NET_4_0 scripts4 = asp-state4.exe diff --git a/tools/asp_state/asp_state.cs b/tools/asp_state/asp_state.cs index 8ba8b628..0157ff57 100644 --- a/tools/asp_state/asp_state.cs +++ b/tools/asp_state/asp_state.cs @@ -11,6 +11,8 @@ using System.IO; using System.Reflection; using System.Runtime.Remoting; +using Mono.Unix; +using Mono.Unix.Native; namespace Mono.ASPNET.Tools { @@ -64,10 +66,22 @@ private static void ShowVerboseConfigurationInfo(string filename) public static void Main (string [] args) { if (args.Length == 0) { + UnixSignal [] signals = new UnixSignal[] { + new UnixSignal(Signum.SIGINT), + new UnixSignal(Signum.SIGTERM), + }; RemotingConfiguration.Configure (ConfigurationFileName, false); ShowVerboseConfigurationInfo(ConfigurationFileName); - Console.Write("Press to stop..."); - Console.ReadLine (); + + // Wait for a unix signal to exit + for (bool exit = false; !exit; ) + { + int id = UnixSignal.WaitAny(signals); + if (id >= 0 && id < signals.Length) + { + if (signals[id].IsSet) exit = true; + } + } } else { ShowUsage(); }