]> prime8.dev >> repos - ttyd.git/commitdiff
protocol: kill process group
authorShuanglei Tao <tsl0922@gmail.com>
Sat, 16 Mar 2019 13:23:18 +0000 (21:23 +0800)
committerShuanglei Tao <tsl0922@gmail.com>
Sat, 16 Mar 2019 13:23:18 +0000 (21:23 +0800)
src/protocol.c

index 9f1ada5d49b1d52687bfcd3897e9ec6d04ee5c1b..07fe022be3f077e0e9579079139457c3c1cf2531 100644 (file)
@@ -140,10 +140,12 @@ tty_client_destroy(struct tty_client *client) {
     pthread_cond_signal(&client->cond);
     pthread_mutex_unlock(&client->mutex);
 
-    // kill process and free resource
-    lwsl_notice("sending %s (%d) to process %d\n", server->sig_name, server->sig_code, client->pid);
-    if (kill(client->pid, server->sig_code) != 0) {
-        lwsl_err("kill: %d, errno: %d (%s)\n", client->pid, errno, strerror(errno));
+    // kill process (group) and free resource
+    int pgid = getpgid(client->pid);
+    int pid = pgid > 0 ? -pgid : client->pid;
+    lwsl_notice("sending %s (%d) to process (group) %d\n", server->sig_name, server->sig_code, pid);
+    if (kill(pid, server->sig_code) != 0) {
+        lwsl_err("kill: %d, errno: %d (%s)\n", pid, errno, strerror(errno));
     }
     int status;
     while (waitpid(client->pid, &status, 0) == -1 && errno == EINTR)