private static void RunServerProcess(string[] args) { var filename = args[0]; var port = GetTcpPort(args); var profileServerFlag = GetProfileServerFlag(args); Logger.LogInfo("Server image file name is: {0}", filename); Logger.LogInfo("TCP port is: {0}", port); Logger.LogInfo("Profile server flag is: {0}", profileServerFlag); if (profileServerFlag) { Debug.WriteLine("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"); Debug.WriteLine(string.Format("Run server executable with argument (i.e. tcp port number) {0}", port)); Debug.WriteLine("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"); } else { using (var job = new JobObject()) { // Create a new Job for this process and its children. Logger.LogInfo("Creating job."); job.AddCurrentProcess(); Logger.LogInfo("Job created successfully."); // Create the child process and redirect stdin, stdout, stderr. var argumentLine = (port.HasValue ? port.Value.ToString() : ""); Logger.LogInfo("Creating server process."); using (var createProcessResult = new ProcessCreator().CreateProcess(filename, argumentLine, CreateProcessOptions.Default)) { Logger.LogInfo("Server process created successfully (pid={0}).", createProcessResult.Process.Id); Logger.LogInfo("Waiting for server process to exit."); createProcessResult.Process.WaitForExit(); Logger.LogInfo("Server process exit code: 0x{0:x8}.", createProcessResult.Process.ExitCode); } } Logger.LogInfo("Exiting normally."); } }