From patchwork Thu Jun 2 09:16:09 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Daniel Wagner X-Patchwork-Id: 9149601 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 2391360221 for ; Thu, 2 Jun 2016 09:16:25 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 12FF9254F7 for ; Thu, 2 Jun 2016 09:16:25 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 080D526907; Thu, 2 Jun 2016 09:16:25 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.9 required=2.0 tests=BAYES_00,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 8DC3D254F7 for ; Thu, 2 Jun 2016 09:16:24 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752966AbcFBJQV (ORCPT ); Thu, 2 Jun 2016 05:16:21 -0400 Received: from hotel311.server4you.de ([85.25.146.15]:44133 "EHLO hotel311.server4you.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752198AbcFBJQT (ORCPT ); Thu, 2 Jun 2016 05:16:19 -0400 Received: from hotel311.server4you.de (localhost [127.0.0.1]) by filter.mynetwork.local (Postfix) with ESMTP id B10961941A2E; Thu, 2 Jun 2016 11:16:15 +0200 (CEST) Received: from localhost (unknown [212.118.206.70]) by hotel311.server4you.de (Postfix) with ESMTPSA id 5FED319419EC; Thu, 2 Jun 2016 11:16:15 +0200 (CEST) From: Daniel Wagner To: Jeff Layton Cc: linux-fsdevel@vger.kernel.org, Dave Chinner , Daniel Wagner Subject: [PATCH v0 3/3] posix03: Do not kill everything in the process group Date: Thu, 2 Jun 2016 11:16:09 +0200 Message-Id: <1464858969-23939-4-git-send-email-wagi@monom.org> X-Mailer: git-send-email 2.5.5 In-Reply-To: <1464858969-23939-1-git-send-email-wagi@monom.org> References: <1464858969-23939-1-git-send-email-wagi@monom.org> Sender: linux-fsdevel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-fsdevel@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Daniel Wagner kill(0, SIGINT) sends to all in the process group the signal including the parent shell. Instead remember the PIDs of all children and just send the signal to these processes. Reported-by: Dave Chinner Signed-off-by: Daniel Wagner --- posix03.c | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/posix03.c b/posix03.c index a36caa5..4ee130b 100644 --- a/posix03.c +++ b/posix03.c @@ -71,13 +71,18 @@ static int fcntl_unlock(int fd, off_t off, off_t len) return fcntl(fd, F_SETLKW, &fl); } +/* The PIDs of all children */ +static pid_t *cpids; + static void kill_children() { siginfo_t infop; + int i; signal(SIGINT, SIG_IGN); - kill(0, SIGINT); + for (i = 0; cpids[i]; i++) + kill(cpids[i], SIGINT); while (waitid(P_ALL, 0, &infop, WEXITED) != -1); } @@ -161,14 +166,21 @@ int main(int argc, char *argv[]) signal(SIGINT, sighandler); + cpids = malloc((num + 1) * sizeof(pid_t)); + if (!cpids) + err(1, "malloc"); + cpids[num] = 0; + for (i = 0; i < num; i++) { - switch (fork()) { + pid_t pid = fork(); + switch (pid) { case 0: signal(SIGINT, SIG_DFL); return do_child(lockfd, i, to_lockers[0], from_lockers[1]); case -1: err(1, "fork failed"); } + cpids[i] = pid; } close(to_lockers[0]); @@ -208,5 +220,6 @@ int main(int argc, char *argv[]) printf("%ld.%09ld\n", total.tv_sec, total.tv_nsec); kill_children(); + free(cpids); return 0; }