]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
avoid leaving dangling children by killing spawned processes recursively
authorSam Stenvall <neggelandia@gmail.com>
Thu, 9 Apr 2015 13:06:46 +0000 (16:06 +0300)
committerJaroslav Kysela <perex@perex.cz>
Thu, 9 Apr 2015 13:14:06 +0000 (15:14 +0200)
src/spawn.c

index 1b7ac264a112835850e4ed5a79f5e1253f6b8264..6651f0b6cc3ddca16e59bd959bdb1fcd1b98d93a 100644 (file)
@@ -299,7 +299,8 @@ spawn_kill(pid_t pid, int sig)
       if(s->pid == pid)
         break;
     if (s) {
-      r = kill(pid, sig);
+      /* kill the whole process group */
+      r = kill(-pid, sig);
       if (r < 0)
         r = -errno;
     }
@@ -502,8 +503,14 @@ spawn_and_give_stdout(const char *prog, char *argv[], char *envp[],
   close(fd[1]);
 
   *rd = fd[0];
-  if (pid)
+  if (pid) {
     *pid = p;
+
+    // make the spawned process a session leader so killing the
+    // process group recursively kills any child process that
+    // might have been spawned
+    setpgid(p, p);
+  }
   return 0;
 }