1 /* SPDX-License-Identifier: LGPL-2.1-or-later */
2 #pragma once
3 
4 typedef struct KillContext KillContext;
5 
6 #include <stdbool.h>
7 #include <stdio.h>
8 
9 #include "macro.h"
10 
11 typedef enum KillMode {
12         /* The kill mode is a property of a unit. */
13         KILL_CONTROL_GROUP = 0,
14         KILL_PROCESS,
15         KILL_MIXED,
16         KILL_NONE,
17         _KILL_MODE_MAX,
18         _KILL_MODE_INVALID = -EINVAL,
19 } KillMode;
20 
21 struct KillContext {
22         KillMode kill_mode;
23         int kill_signal;
24         int restart_kill_signal;
25         int final_kill_signal;
26         int watchdog_signal;
27         bool send_sigkill;
28         bool send_sighup;
29 };
30 
31 typedef enum KillWho {
32         /* Kill who is a property of an operation */
33         KILL_MAIN,
34         KILL_CONTROL,
35         KILL_ALL,
36         KILL_MAIN_FAIL,
37         KILL_CONTROL_FAIL,
38         KILL_ALL_FAIL,
39         _KILL_WHO_MAX,
40         _KILL_WHO_INVALID = -EINVAL,
41 } KillWho;
42 
43 void kill_context_init(KillContext *c);
44 void kill_context_dump(KillContext *c, FILE *f, const char *prefix);
45 
46 const char *kill_mode_to_string(KillMode k) _const_;
47 KillMode kill_mode_from_string(const char *s) _pure_;
48 
49 const char *kill_who_to_string(KillWho k) _const_;
50 KillWho kill_who_from_string(const char *s) _pure_;
51 
restart_kill_signal(const KillContext * c)52 static inline int restart_kill_signal(const KillContext *c) {
53         if (c->restart_kill_signal != 0)
54                 return c->restart_kill_signal;
55         return c->kill_signal;
56 }
57