]> git.sur5r.net Git - i3/i3/blobdiff - i3bar/src/child.c
i3bar: Group child processes for signalling
[i3/i3] / i3bar / src / child.c
index 4e5e49c928edf37f1e3ff450c0cb5b5c0f87ddaa..fd4185eec8ca0fd23a83da74f8950dde9b7766d4 100644 (file)
@@ -22,6 +22,7 @@
 #include <yajl/yajl_parse.h>
 #include <yajl/yajl_version.h>
 #include <yajl/yajl_gen.h>
+#include <paths.h>
 
 #include "common.h"
 
@@ -423,12 +424,8 @@ void start_child(char *command) {
                 dup2(pipe_in[1], STDOUT_FILENO);
                 dup2(pipe_out[0], STDIN_FILENO);
 
-                static const char *shell = NULL;
-
-                if ((shell = getenv("SHELL")) == NULL)
-                    shell = "/bin/sh";
-
-                execl(shell, shell, "-c", command, (char*) NULL);
+                setpgid(child.pid, 0);
+                execl(_PATH_BSHELL, _PATH_BSHELL, "-c", command, (char*) NULL);
                 return;
             default:
                 /* Parent-process. Reroute streams */
@@ -511,8 +508,8 @@ void send_block_clicked(int button, const char *name, const char *instance, int
 void kill_child_at_exit(void) {
     if (child.pid > 0) {
         if (child.cont_signal > 0 && child.stopped)
-            kill(child.pid, child.cont_signal);
-        kill(child.pid, SIGTERM);
+            killpg(child.pid, child.cont_signal);
+        killpg(child.pid, SIGTERM);
     }
 }
 
@@ -524,8 +521,8 @@ void kill_child_at_exit(void) {
 void kill_child(void) {
     if (child.pid > 0) {
         if (child.cont_signal > 0 && child.stopped)
-            kill(child.pid, child.cont_signal);
-        kill(child.pid, SIGTERM);
+            killpg(child.pid, child.cont_signal);
+        killpg(child.pid, SIGTERM);
         int status;
         waitpid(child.pid, &status, 0);
         cleanup();
@@ -539,7 +536,7 @@ void kill_child(void) {
 void stop_child(void) {
     if (child.stop_signal > 0 && !child.stopped) {
         child.stopped = true;
-        kill(child.pid, child.stop_signal);
+        killpg(child.pid, child.stop_signal);
     }
 }
 
@@ -550,6 +547,6 @@ void stop_child(void) {
 void cont_child(void) {
     if (child.cont_signal > 0 && child.stopped) {
         child.stopped = false;
-        kill(child.pid, child.cont_signal);
+        killpg(child.pid, child.cont_signal);
     }
 }