fateshare: Add FreeBSD specific API for controlling processes

Type: improvement
Change-Id: I7ea8b5505a2663d6751208f0001e4b9ba2deb150
Signed-off-by: Tom Jones <thj@freebsd.org>
This commit is contained in:
Tom Jones
2024-02-08 14:55:36 +00:00
committed by Damjan Marion
parent abd6a7b2b5
commit 154e19c09a
2 changed files with 43 additions and 0 deletions

View File

@ -27,7 +27,11 @@
#include <sys/types.h>
#include <sys/wait.h>
#ifdef __linux__
#include <sys/prctl.h> // prctl(), PR_SET_PDEATHSIG
#else
#include <sys/procctl.h>
#endif /* __linux__ */
#include <limits.h>
fateshare_main_t fateshare_main;
@ -87,12 +91,23 @@ launch_monitor (fateshare_main_t *kmp)
{
dup2 (logfd, 1);
dup2 (logfd, 2);
#ifdef __linux__
int r = prctl (PR_SET_PDEATHSIG, SIGTERM);
if (r == -1)
{
perror (0);
exit (1);
}
#else
int r, s = SIGTERM;
r = procctl (P_PID, 0, PROC_PDEATHSIG_CTL, &s);
if (r == -1)
{
perror (0);
exit (1);
}
#endif /* __linux__ */
pid_t current_ppid = getppid ();
if (current_ppid != ppid_before_fork)
{

View File

@ -4,7 +4,12 @@
#include <sys/types.h>
#include <sys/wait.h>
#ifdef __linux__
#include <sys/prctl.h> // prctl(), PR_SET_PDEATHSIG
#else
#include <signal.h>
#include <sys/procctl.h>
#endif /* __linux__ */
#include <sys/stat.h>
#include <fcntl.h>
@ -82,6 +87,7 @@ launch_command (char *scmd, char *logname_base)
}
/* child */
#ifdef __linux__
int r = prctl (PR_SET_PDEATHSIG, SIGTERM);
if (r == -1)
{
@ -89,6 +95,17 @@ launch_command (char *scmd, char *logname_base)
sleep (5);
exit (1);
}
#else
int r, s = SIGTERM;
r = procctl (P_PID, 0, PROC_PDEATHSIG_CTL, &s);
if (r == -1)
{
perror ("procctl");
exit (1);
}
#endif /* __linux__ */
if (getppid () != ppid_before_fork)
{
sleep (5);
@ -180,12 +197,23 @@ main (int argc, char **argv)
exit (2);
}
#ifdef __linux__
int r = prctl (PR_SET_PDEATHSIG, SIGTERM);
if (r == -1)
{
perror (0);
exit (1);
}
#else
int r, s = SIGTERM;
r = procctl (P_PID, 0, PROC_PDEATHSIG_CTL, &s);
if (r == -1)
{
perror ("procctl");
exit (1);
}
#endif /* __linux__ */
/* Establish handler. */
struct sigaction sa;