1 // Copyright 2017 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "base/process/kill.h"
6
7 #include <zircon/syscalls.h>
8
9 #include "base/process/process_iterator.h"
10 #include "base/task/post_task.h"
11 #include "base/threading/platform_thread.h"
12
13 namespace base {
14
KillProcessGroup(ProcessHandle process_group_id)15 bool KillProcessGroup(ProcessHandle process_group_id) {
16 // |process_group_id| is really a job on Fuchsia.
17 zx_status_t status = zx_task_kill(process_group_id);
18 DLOG_IF(ERROR, status != ZX_OK)
19 << "unable to terminate job " << process_group_id;
20 return status == ZX_OK;
21 }
22
GetTerminationStatus(ProcessHandle handle,int * exit_code)23 TerminationStatus GetTerminationStatus(ProcessHandle handle, int* exit_code) {
24 DCHECK(exit_code);
25
26 zx_info_process_t process_info;
27 zx_status_t status =
28 zx_object_get_info(handle, ZX_INFO_PROCESS, &process_info,
29 sizeof(process_info), nullptr, nullptr);
30 if (status != ZX_OK) {
31 DLOG(ERROR) << "unable to get termination status for " << handle;
32 *exit_code = 0;
33 return TERMINATION_STATUS_NORMAL_TERMINATION;
34 }
35 if (!process_info.started) {
36 *exit_code = 0;
37 return TERMINATION_STATUS_LAUNCH_FAILED;
38 }
39 if (!process_info.exited) {
40 *exit_code = 0;
41 return TERMINATION_STATUS_STILL_RUNNING;
42 }
43
44 // TODO(fuchsia): Is there more information about types of crashes, OOM, etc.
45 // available? https://crbug.com/706592.
46
47 *exit_code = process_info.return_code;
48 return process_info.return_code == 0
49 ? TERMINATION_STATUS_NORMAL_TERMINATION
50 : TERMINATION_STATUS_ABNORMAL_TERMINATION;
51 }
52
53 } // namespace base
54