diff --git a/i3bar/include/child.h b/i3bar/include/child.h index ceb18336..24c7e460 100644 --- a/i3bar/include/child.h +++ b/i3bar/include/child.h @@ -21,7 +21,13 @@ void start_child(char *command); /* - * kill()s the child-prozess (if existend) and closes and + * kill()s the child-process (if any). Called when exit()ing. + * + */ +void kill_child_at_exit(); + +/* + * kill()s the child-process (if any) and closes and * free()s the stdin- and sigchild-watchers * */ diff --git a/i3bar/src/child.c b/i3bar/src/child.c index d5efa2aa..c97f5838 100644 --- a/i3bar/src/child.c +++ b/i3bar/src/child.c @@ -311,6 +311,18 @@ void start_child(char *command) { ev_child_init(child_sig, &child_sig_cb, child_pid, 0); ev_child_start(main_loop, child_sig); + atexit(kill_child_at_exit); +} + +/* + * kill()s the child-process (if any). Called when exit()ing. + * + */ +void kill_child_at_exit() { + if (child_pid != 0) { + kill(child_pid, SIGCONT); + kill(child_pid, SIGTERM); + } } /*