Chromium Code Reviews| Index: content/zygote/zygote_linux.cc |
| diff --git a/content/zygote/zygote_linux.cc b/content/zygote/zygote_linux.cc |
| index 5a84dec6db9f48d43b4a5d743b87e8b95b55ce8f..a329eb095f13ef70b04444c8d2e978448c2af9a4 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::SignalExitCode(SIGINT) || |
| + exit_status == sandbox::SignalExitCode(SIGTERM)) { |
| + *status = base::TERMINATION_STATUS_PROCESS_WAS_KILLED; |
| + } |
| } |
| return true; |
| @@ -403,17 +399,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( |
|
jln (very slow on Chromium)
2015/05/28 09:02:33
Could you think of a way to rename this to indicat
|
| - sig, kUnexpectedExitCode); |
| + sig, sandbox::SignalExitCode(sig)); |
| } |
| } |