diff --git services/service_manager/embedder/main.cc services/service_manager/embedder/main.cc
index f9c275cdd78f..247142951d99 100644
--- services/service_manager/embedder/main.cc
+++ services/service_manager/embedder/main.cc
@@ -244,22 +244,36 @@ int RunService(MainDelegate* delegate) {
   return 0;
 }
 
+ProcessType GetProcessType(MainDelegate* delegate,
+                           const base::CommandLine& command_line) {
+  ProcessType process_type = delegate->OverrideProcessType();
+  if (process_type == ProcessType::kDefault) {
+    const std::string& type_switch =
+        command_line.GetSwitchValueASCII(switches::kProcessType);
+    if (type_switch == switches::kProcessTypeServiceManager) {
+      process_type = ProcessType::kServiceManager;
+    } else if (type_switch == switches::kProcessTypeService) {
+      process_type = ProcessType::kService;
+    } else {
+      process_type = ProcessType::kEmbedder;
+    }
+  }
+  return process_type;
+}
+
 }  // namespace
 
 MainParams::MainParams(MainDelegate* delegate) : delegate(delegate) {}
 
 MainParams::~MainParams() {}
 
-int Main(const MainParams& params) {
+int MainInitialize(MainParams& params) {
   MainDelegate* delegate = params.delegate;
   DCHECK(delegate);
 
   int exit_code = -1;
   base::debug::GlobalActivityTracker* tracker = nullptr;
   ProcessType process_type = delegate->OverrideProcessType();
-#if defined(OS_MACOSX)
-  std::unique_ptr<base::mac::ScopedNSAutoreleasePool> autorelease_pool;
-#endif
 
   // A flag to indicate whether Main() has been called before. On Android, we
   // may re-run Main() without restarting the browser process. This flag
@@ -345,12 +359,7 @@ int Main(const MainParams& params) {
     MainDelegate::InitializeParams init_params;
 
 #if defined(OS_MACOSX)
-    // We need this pool for all the objects created before we get to the event
-    // loop, but we don't want to leave them hanging around until the app quits.
-    // Each "main" needs to flush this pool right before it goes into its main
-    // event loop to get rid of the cruft.
-    autorelease_pool = std::make_unique<base::mac::ScopedNSAutoreleasePool>();
-    init_params.autorelease_pool = autorelease_pool.get();
+    init_params.autorelease_pool = params.autorelease_pool.get();
     InitializeMac();
 #endif
 
@@ -422,18 +431,16 @@ int Main(const MainParams& params) {
     }
   }
 
+  return exit_code;
+}
+
+int MainRun(MainParams& params) {
+  MainDelegate* delegate = params.delegate;
+  DCHECK(delegate);
+
+  int exit_code = 0;
   const auto& command_line = *base::CommandLine::ForCurrentProcess();
-  if (process_type == ProcessType::kDefault) {
-    std::string type_switch =
-        command_line.GetSwitchValueASCII(switches::kProcessType);
-    if (type_switch == switches::kProcessTypeServiceManager) {
-      process_type = ProcessType::kServiceManager;
-    } else if (type_switch == switches::kProcessTypeService) {
-      process_type = ProcessType::kService;
-    } else {
-      process_type = ProcessType::kEmbedder;
-    }
-  }
+  const ProcessType process_type = GetProcessType(delegate, command_line);
   switch (process_type) {
     case ProcessType::kDefault:
       NOTREACHED();
@@ -455,6 +462,8 @@ int Main(const MainParams& params) {
       break;
   }
 
+  base::debug::GlobalActivityTracker* tracker =
+      base::debug::GlobalActivityTracker::Get();
   if (tracker) {
     if (exit_code == 0) {
       tracker->SetProcessPhaseIfEnabled(
@@ -466,13 +475,38 @@ int Main(const MainParams& params) {
     }
   }
 
+  return exit_code;
+}
+
+void MainShutdown(MainParams& params) {
+  MainDelegate* delegate = params.delegate;
+  DCHECK(delegate);
+
 #if defined(OS_MACOSX)
-  autorelease_pool.reset();
+  params.autorelease_pool.reset();
 #endif
 
+  const ProcessType process_type =
+      GetProcessType(delegate, *base::CommandLine::ForCurrentProcess());
   if (process_type == ProcessType::kEmbedder)
     delegate->ShutDownEmbedderProcess();
+}
+
+int Main(MainParams& params) {
+#if defined(OS_MACOSX)
+  // We need this pool for all the objects created before we get to the event
+  // loop, but we don't want to leave them hanging around until the app quits.
+  // Each "main" needs to flush this pool right before it goes into its main
+  // event loop to get rid of the cruft.
+  params.autorelease_pool =
+      std::make_unique<base::mac::ScopedNSAutoreleasePool>();
+#endif
 
+  int exit_code = MainInitialize(params);
+  if (exit_code >= 0)
+    return exit_code;
+  exit_code = MainRun(params);
+  MainShutdown(params);
   return exit_code;
 }
 
diff --git services/service_manager/embedder/main.h services/service_manager/embedder/main.h
index 57e88aa85dfe..5ed6ec2abfda 100644
--- services/service_manager/embedder/main.h
+++ services/service_manager/embedder/main.h
@@ -5,9 +5,15 @@
 #ifndef SERVICES_SERVICE_MANAGER_EMBEDDER_MAIN_H_
 #define SERVICES_SERVICE_MANAGER_EMBEDDER_MAIN_H_
 
+#include <memory>
+
 #include "base/component_export.h"
 #include "build/build_config.h"
 
+#if defined(OS_MACOSX)
+#include "base/mac/scoped_nsautorelease_pool.h"
+#endif  // defined(OS_MACOSX)
+
 namespace service_manager {
 
 class MainDelegate;
@@ -22,11 +28,22 @@ struct COMPONENT_EXPORT(SERVICE_MANAGER_EMBEDDER) MainParams {
   int argc = 0;
   const char** argv = nullptr;
 #endif
+
+#if defined(OS_MACOSX)
+  std::unique_ptr<base::mac::ScopedNSAutoreleasePool> autorelease_pool;
+#endif
 };
 
+// Split Main() into separate stages.
+int COMPONENT_EXPORT(SERVICE_MANAGER_EMBEDDER)
+    MainInitialize(MainParams& params);
+int COMPONENT_EXPORT(SERVICE_MANAGER_EMBEDDER) MainRun(MainParams& params);
+void COMPONENT_EXPORT(SERVICE_MANAGER_EMBEDDER)
+    MainShutdown(MainParams& params);
+
 // Main function which should be called as early as possible by any executable
 // embedding the service manager.
-int COMPONENT_EXPORT(SERVICE_MANAGER_EMBEDDER) Main(const MainParams& params);
+int COMPONENT_EXPORT(SERVICE_MANAGER_EMBEDDER) Main(MainParams& params);
 
 }  // namespace service_manager
 
diff --git services/service_manager/embedder/set_process_title.cc services/service_manager/embedder/set_process_title.cc
index 1dc53b847ef9..5432ab02a088 100644
--- services/service_manager/embedder/set_process_title.cc
+++ services/service_manager/embedder/set_process_title.cc
@@ -44,7 +44,7 @@ void SetProcessTitleFromCommandLine(const char** main_argv) {
   bool have_argv0 = false;
 
 #if defined(OS_LINUX)
-  DCHECK_EQ(base::PlatformThread::CurrentId(), getpid());
+  //DCHECK_EQ(base::PlatformThread::CurrentId(), getpid());
 
   if (main_argv)
     setproctitle_init(main_argv);
