Unit *u,
KillContext *c,
KillOperation k,
- pid_t main_pid,
- pid_t control_pid,
+ PidRef* main_pid,
+ PidRef* control_pid,
bool main_pid_alien) {
bool wait_for_exit = false, send_sighup;
IN_SET(k, KILL_TERMINATE, KILL_TERMINATE_AND_LOG) &&
sig != SIGHUP;
- if (main_pid > 0) {
+ if (pidref_is_set(main_pid)) {
if (log_func)
- log_func(main_pid, sig, u);
+ log_func(main_pid->pid, sig, u);
- r = kill_and_sigcont(main_pid, sig);
+ r = pidref_kill_and_sigcont(main_pid, sig);
if (r < 0 && r != -ESRCH) {
_cleanup_free_ char *comm = NULL;
- (void) get_process_comm(main_pid, &comm);
+ (void) get_process_comm(main_pid->pid, &comm);
- log_unit_warning_errno(u, r, "Failed to kill main process " PID_FMT " (%s), ignoring: %m", main_pid, strna(comm));
+ log_unit_warning_errno(u, r, "Failed to kill main process " PID_FMT " (%s), ignoring: %m", main_pid->pid, strna(comm));
} else {
if (!main_pid_alien)
wait_for_exit = true;
if (r != -ESRCH && send_sighup)
- (void) kill(main_pid, SIGHUP);
+ (void) pidref_kill(main_pid, SIGHUP);
}
}
- if (control_pid > 0) {
+ if (pidref_is_set(control_pid)) {
if (log_func)
- log_func(control_pid, sig, u);
+ log_func(control_pid->pid, sig, u);
- r = kill_and_sigcont(control_pid, sig);
+ r = pidref_kill_and_sigcont(control_pid, sig);
if (r < 0 && r != -ESRCH) {
_cleanup_free_ char *comm = NULL;
- (void) get_process_comm(control_pid, &comm);
+ (void) get_process_comm(control_pid->pid, &comm);
- log_unit_warning_errno(u, r, "Failed to kill control process " PID_FMT " (%s), ignoring: %m", control_pid, strna(comm));
+ log_unit_warning_errno(u, r, "Failed to kill control process " PID_FMT " (%s), ignoring: %m", control_pid->pid, strna(comm));
} else {
wait_for_exit = true;
if (r != -ESRCH && send_sighup)
- (void) kill(control_pid, SIGHUP);
+ (void) pidref_kill(control_pid, SIGHUP);
}
}
_cleanup_set_free_ Set *pid_set = NULL;
/* Exclude the main/control pids from being killed via the cgroup */
- pid_set = unit_pid_set(main_pid, control_pid);
+ pid_set = unit_pid_set(main_pid ? main_pid->pid : 0, control_pid ? control_pid->pid : 0);
if (!pid_set)
return -ENOMEM;
if (send_sighup) {
set_free(pid_set);
- pid_set = unit_pid_set(main_pid, control_pid);
+ pid_set = unit_pid_set(main_pid ? main_pid->pid : 0, control_pid ? control_pid->pid : 0);
if (!pid_set)
return -ENOMEM;
#include "sd-id128.h"
#include "bpf-program.h"
+#include "cgroup.h"
#include "condition.h"
#include "emergency-action.h"
#include "install.h"
#include "list.h"
-#include "show-status.h"
+#include "pidref.h"
#include "set.h"
+#include "show-status.h"
#include "unit-file.h"
-#include "cgroup.h"
typedef struct UnitRef UnitRef;
int unit_write_setting(Unit *u, UnitWriteFlags flags, const char *name, const char *data);
int unit_write_settingf(Unit *u, UnitWriteFlags mode, const char *name, const char *format, ...) _printf_(4,5);
-int unit_kill_context(Unit *u, KillContext *c, KillOperation k, pid_t main_pid, pid_t control_pid, bool main_pid_alien);
+int unit_kill_context(Unit *u, KillContext *c, KillOperation k, PidRef *main_pid, PidRef *control_pid, bool main_pid_alien);
int unit_make_transient(Unit *u);