In UNIX, in order to have the program put itself in the background, it needs to fork a child process. True system daemons are double-forked. The first fork puts the program in the background, the second fork isolates itself from the current process group (e.g., a user's session). However, Windows has never supported the concept of fork(), so it would be surprising to see it in .NET. It appears that Mono is closely following the .NET SDK to make sure that Mono (.NET) programs are cross-platform, but in case there is a concept of fork() within Mono, go with that. For a 100% pure .NET cross-platform program, I'd suggest you take a peek at System.Diagnostics.Process.