mirror of git://git.suckless.org/sbase
respawn: kill child process upon SIGTERM
We might revisit this and be more strict i.e. kill the child process even if it is in a new process session/group. For now this is probably a good enough balance. This patch changes the existing semantics of respawn, the child process is now part of the same process session as respawn.
This commit is contained in:
parent
d9aaa0f501
commit
ce59961f19
14
respawn.c
14
respawn.c
|
@ -7,12 +7,22 @@
|
|||
|
||||
#include <errno.h>
|
||||
#include <fcntl.h>
|
||||
#include <signal.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include "util.h"
|
||||
|
||||
static void
|
||||
sigterm(int sig)
|
||||
{
|
||||
if (sig == SIGTERM) {
|
||||
kill(0, SIGTERM);
|
||||
_exit(EXIT_SUCCESS);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
usage(void)
|
||||
{
|
||||
|
@ -48,6 +58,8 @@ main(int argc, char *argv[])
|
|||
if (fifo && delay > 0)
|
||||
usage();
|
||||
|
||||
signal(SIGTERM, sigterm);
|
||||
|
||||
if (fifo) {
|
||||
fd = open(fifo, O_RDWR | O_NONBLOCK);
|
||||
if (fd < 0)
|
||||
|
@ -74,8 +86,6 @@ main(int argc, char *argv[])
|
|||
eprintf("fork:");
|
||||
switch (pid) {
|
||||
case 0:
|
||||
if (setsid() < 0)
|
||||
eprintf("setsid:");
|
||||
execvp(argv[0], argv);
|
||||
savederrno = errno;
|
||||
weprintf("execvp %s:", argv[0]);
|
||||
|
|
Loading…
Reference in New Issue