| Index: content/zygote/zygote_linux.cc | 
| diff --git a/content/zygote/zygote_linux.cc b/content/zygote/zygote_linux.cc | 
| index 59a14c1c9ef3f12102a581125d1ff584598048b4..0a333e38843bf6b76d297efd1d63368b36b90b92 100644 | 
| --- a/content/zygote/zygote_linux.cc | 
| +++ b/content/zygote/zygote_linux.cc | 
| @@ -49,14 +49,6 @@ namespace { | 
| void SIGCHLDHandler(int signal) { | 
| } | 
|  | 
| -// On Linux, when a process is the init process of a PID namespace, it cannot be | 
| -// terminated by signals like SIGTERM or SIGINT, since they are ignored unless | 
| -// we register a handler for them. In the handlers, we exit with this special | 
| -// exit code that GetTerminationStatus understands to mean that we were | 
| -// terminated by an external signal. | 
| -const int kKilledExitCode = 0x80; | 
| -const int kUnexpectedExitCode = 0x81; | 
| - | 
| int LookUpFd(const base::GlobalDescriptors::Mapping& fd_mapping, uint32_t key) { | 
| for (size_t index = 0; index < fd_mapping.size(); ++index) { | 
| if (fd_mapping[index].key == key) | 
| @@ -316,8 +308,12 @@ bool Zygote::GetTerminationStatus(base::ProcessHandle real_pid, | 
| process_info_map_.erase(real_pid); | 
| } | 
|  | 
| -  if (WIFEXITED(*exit_code) && WEXITSTATUS(*exit_code) == kKilledExitCode) { | 
| -    *status = base::TERMINATION_STATUS_PROCESS_WAS_KILLED; | 
| +  if (WIFEXITED(*exit_code)) { | 
| +    const int exit_status = WEXITSTATUS(*exit_code); | 
| +    if (exit_status == sandbox::NamespaceSandbox::SignalExitCode(SIGINT) || | 
| +        exit_status == sandbox::NamespaceSandbox::SignalExitCode(SIGTERM)) { | 
| +      *status = base::TERMINATION_STATUS_PROCESS_WAS_KILLED; | 
| +    } | 
| } | 
|  | 
| return true; | 
| @@ -394,7 +390,7 @@ int Zygote::ForkWithRealPid(const std::string& process_type, | 
| pid = sandbox::NamespaceSandbox::ForkInNewPidNamespace( | 
| /*drop_capabilities_in_child=*/true); | 
| } else { | 
| -      pid = fork(); | 
| +      pid = sandbox::Credentials::ForkAndDropCapabilitiesInChild(); | 
| } | 
| } | 
|  | 
| @@ -402,17 +398,11 @@ int Zygote::ForkWithRealPid(const std::string& process_type, | 
| // If the process is the init process inside a PID namespace, it must have | 
| // explicit signal handlers. | 
| if (getpid() == 1) { | 
| -      for (const int sig : {SIGINT, SIGTERM}) { | 
| -        sandbox::NamespaceSandbox::InstallTerminationSignalHandler( | 
| -            sig, kKilledExitCode); | 
| -      } | 
| - | 
| -      static const int kUnexpectedSignals[] = { | 
| -          SIGHUP, SIGQUIT, SIGABRT, SIGPIPE, SIGUSR1, SIGUSR2, | 
| -      }; | 
| -      for (const int sig : kUnexpectedSignals) { | 
| +      static const int kTerminationSignals[] = { | 
| +          SIGINT, SIGTERM, SIGHUP, SIGQUIT, SIGABRT, SIGPIPE, SIGUSR1, SIGUSR2}; | 
| +      for (const int sig : kTerminationSignals) { | 
| sandbox::NamespaceSandbox::InstallTerminationSignalHandler( | 
| -            sig, kUnexpectedExitCode); | 
| +            sig, sandbox::NamespaceSandbox::SignalExitCode(sig)); | 
| } | 
| } | 
|  | 
|  |