xref: /aosp_15_r20/external/cronet/base/process/kill_fuchsia.cc (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1*6777b538SAndroid Build Coastguard Worker // Copyright 2017 The Chromium Authors
2*6777b538SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
3*6777b538SAndroid Build Coastguard Worker // found in the LICENSE file.
4*6777b538SAndroid Build Coastguard Worker 
5*6777b538SAndroid Build Coastguard Worker #include "base/process/kill.h"
6*6777b538SAndroid Build Coastguard Worker 
7*6777b538SAndroid Build Coastguard Worker #include <zircon/syscalls.h>
8*6777b538SAndroid Build Coastguard Worker 
9*6777b538SAndroid Build Coastguard Worker #include "base/logging.h"
10*6777b538SAndroid Build Coastguard Worker #include "base/process/process_iterator.h"
11*6777b538SAndroid Build Coastguard Worker #include "base/threading/platform_thread.h"
12*6777b538SAndroid Build Coastguard Worker 
13*6777b538SAndroid Build Coastguard Worker namespace base {
14*6777b538SAndroid Build Coastguard Worker 
GetTerminationStatus(ProcessHandle handle,int * exit_code)15*6777b538SAndroid Build Coastguard Worker TerminationStatus GetTerminationStatus(ProcessHandle handle, int* exit_code) {
16*6777b538SAndroid Build Coastguard Worker   DCHECK(exit_code);
17*6777b538SAndroid Build Coastguard Worker 
18*6777b538SAndroid Build Coastguard Worker   zx_info_process_t process_info;
19*6777b538SAndroid Build Coastguard Worker   zx_status_t status =
20*6777b538SAndroid Build Coastguard Worker       zx_object_get_info(handle, ZX_INFO_PROCESS, &process_info,
21*6777b538SAndroid Build Coastguard Worker                          sizeof(process_info), nullptr, nullptr);
22*6777b538SAndroid Build Coastguard Worker   if (status != ZX_OK) {
23*6777b538SAndroid Build Coastguard Worker     DLOG(ERROR) << "unable to get termination status for " << handle;
24*6777b538SAndroid Build Coastguard Worker     *exit_code = 0;
25*6777b538SAndroid Build Coastguard Worker     return TERMINATION_STATUS_NORMAL_TERMINATION;
26*6777b538SAndroid Build Coastguard Worker   }
27*6777b538SAndroid Build Coastguard Worker   if ((process_info.flags & ZX_INFO_PROCESS_FLAG_STARTED) == 0) {
28*6777b538SAndroid Build Coastguard Worker     *exit_code = 0;
29*6777b538SAndroid Build Coastguard Worker     return TERMINATION_STATUS_LAUNCH_FAILED;
30*6777b538SAndroid Build Coastguard Worker   }
31*6777b538SAndroid Build Coastguard Worker   if ((process_info.flags & ZX_INFO_PROCESS_FLAG_EXITED) == 0) {
32*6777b538SAndroid Build Coastguard Worker     *exit_code = 0;
33*6777b538SAndroid Build Coastguard Worker     return TERMINATION_STATUS_STILL_RUNNING;
34*6777b538SAndroid Build Coastguard Worker   }
35*6777b538SAndroid Build Coastguard Worker 
36*6777b538SAndroid Build Coastguard Worker   *exit_code = static_cast<int>(process_info.return_code);
37*6777b538SAndroid Build Coastguard Worker   switch (process_info.return_code) {
38*6777b538SAndroid Build Coastguard Worker     case 0:
39*6777b538SAndroid Build Coastguard Worker       return TERMINATION_STATUS_NORMAL_TERMINATION;
40*6777b538SAndroid Build Coastguard Worker     case ZX_TASK_RETCODE_SYSCALL_KILL:
41*6777b538SAndroid Build Coastguard Worker     case ZX_TASK_RETCODE_CRITICAL_PROCESS_KILL:
42*6777b538SAndroid Build Coastguard Worker     case ZX_TASK_RETCODE_POLICY_KILL:
43*6777b538SAndroid Build Coastguard Worker     case ZX_TASK_RETCODE_VDSO_KILL:
44*6777b538SAndroid Build Coastguard Worker       return TERMINATION_STATUS_PROCESS_WAS_KILLED;
45*6777b538SAndroid Build Coastguard Worker     case ZX_TASK_RETCODE_OOM_KILL:
46*6777b538SAndroid Build Coastguard Worker       return TERMINATION_STATUS_OOM;
47*6777b538SAndroid Build Coastguard Worker     case ZX_TASK_RETCODE_EXCEPTION_KILL:
48*6777b538SAndroid Build Coastguard Worker       return TERMINATION_STATUS_PROCESS_CRASHED;
49*6777b538SAndroid Build Coastguard Worker     default:
50*6777b538SAndroid Build Coastguard Worker       return TERMINATION_STATUS_ABNORMAL_TERMINATION;
51*6777b538SAndroid Build Coastguard Worker   }
52*6777b538SAndroid Build Coastguard Worker }
53*6777b538SAndroid Build Coastguard Worker 
54*6777b538SAndroid Build Coastguard Worker }  // namespace base
55