uloop: make SIGCHLD signal handling optional
Some programs want to manage their own child life cycle without using SIGCHLD signal handler. In these cases, uloop is reaping children for them because they don't have SIGCHLD handler set. This patch makes it possible to disable reaping children through 'uloop_handle_sigchld' variable. Signed-off-by: Petar Paradzik <petar.paradzik@sartura.hr>
This commit is contained in:
parent
7a1057604e
commit
f714be125c
1 changed files with 4 additions and 1 deletions
5
uloop.c
5
uloop.c
|
@ -58,6 +58,7 @@ static struct list_head processes = LIST_HEAD_INIT(processes);
|
||||||
|
|
||||||
static int poll_fd = -1;
|
static int poll_fd = -1;
|
||||||
bool uloop_cancelled = false;
|
bool uloop_cancelled = false;
|
||||||
|
bool uloop_handle_sigchld = true;
|
||||||
static int uloop_status = 0;
|
static int uloop_status = 0;
|
||||||
static bool do_sigchld = false;
|
static bool do_sigchld = false;
|
||||||
|
|
||||||
|
@ -466,7 +467,9 @@ static void uloop_setup_signals(bool add)
|
||||||
|
|
||||||
uloop_install_handler(SIGINT, uloop_handle_sigint, &old_sigint, add);
|
uloop_install_handler(SIGINT, uloop_handle_sigint, &old_sigint, add);
|
||||||
uloop_install_handler(SIGTERM, uloop_handle_sigint, &old_sigterm, add);
|
uloop_install_handler(SIGTERM, uloop_handle_sigint, &old_sigterm, add);
|
||||||
uloop_install_handler(SIGCHLD, uloop_sigchld, &old_sigchld, add);
|
|
||||||
|
if (uloop_handle_sigchld)
|
||||||
|
uloop_install_handler(SIGCHLD, uloop_sigchld, &old_sigchld, add);
|
||||||
|
|
||||||
uloop_ignore_signal(SIGPIPE, add);
|
uloop_ignore_signal(SIGPIPE, add);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue