summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Hofmann <scm@uninformativ.de>2024-06-18 19:09:32 +0200
committerLeonardo Hernández Hernández <leohdz172@proton.me>2024-06-20 16:36:08 -0600
commit7a46fccdba35b46d91226d10c1c9b90e43418c09 (patch)
tree919295c6f52b78375f0437fd00f186e78463b5ab
parentc2e7350f2ef4f07810c8fa49bed3e8db37faa058 (diff)
Run startup_cmd in new session and kill the entire group
When a user's startup_cmd is a little more complex, e.g. a shell script, and forks off several processes, then killing only the main child pid might leave unwanted processes behind on exit. Not all children will notice when their parent or the compositor has quit. To fix this, put startup_cmd into its own session and process group, and kill the entire group on exit.
-rw-r--r--dwl.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/dwl.c b/dwl.c
index 5a31aee..79ccb34 100644
--- a/dwl.c
+++ b/dwl.c
@@ -674,7 +674,7 @@ cleanup(void)
#endif
wl_display_destroy_clients(dpy);
if (child_pid > 0) {
- kill(child_pid, SIGTERM);
+ kill(-child_pid, SIGTERM);
waitpid(child_pid, NULL, 0);
}
wlr_xcursor_manager_destroy(cursor_mgr);
@@ -2141,6 +2141,7 @@ run(char *startup_cmd)
if ((child_pid = fork()) < 0)
die("startup: fork:");
if (child_pid == 0) {
+ setsid();
dup2(piperw[0], STDIN_FILENO);
close(piperw[0]);
close(piperw[1]);