From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 45003 invoked by alias); 20 Jun 2017 06:24:01 -0000 Mailing-List: contact cygwin-help@cygwin.com; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: cygwin-owner@cygwin.com Mail-Followup-To: cygwin@cygwin.com Received: (qmail 44025 invoked by uid 89); 20 Jun 2017 06:23:59 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-2.6 required=5.0 tests=BAYES_00,FREEMAIL_FROM,RCVD_IN_DNSWL_LOW,SPF_PASS autolearn=ham version=3.3.2 spammy=H*MI:webmail, 10312, relationship X-HELO: out3-smtp.messagingengine.com Received: from out3-smtp.messagingengine.com (HELO out3-smtp.messagingengine.com) (66.111.4.27) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Tue, 20 Jun 2017 06:23:57 +0000 Received: from compute1.internal (compute1.nyi.internal [10.202.2.41]) by mailout.nyi.internal (Postfix) with ESMTP id CF9B120B85 for ; Tue, 20 Jun 2017 02:23:55 -0400 (EDT) Received: from web2 ([10.202.2.212]) by compute1.internal (MEProxy); Tue, 20 Jun 2017 02:23:55 -0400 X-ME-Sender: Received: by mailuser.nyi.internal (Postfix, from userid 99) id ADD9E62702; Tue, 20 Jun 2017 02:23:55 -0400 (EDT) Message-Id: <1497939835.2871765.1014990544.3396EEF9@webmail.messagingengine.com> From: Ronald Otto Valentin Fischer To: cygwin@cygwin.com MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset="utf-8" Subject: Killing-Process woes Date: Tue, 20 Jun 2017 06:24:00 -0000 X-SW-Source: 2017-06/txt/msg00236.txt.bz2 I'm spawning processes in background, but have problems killing them. Here is the setup: My script (zsh) creates one or more processes in the background, and waits until they are finished. I have also set up a trap for SIGINT, with the intention that if I press Control-C, the background processes should be killed. I have verified the setup so far, that upon Control-C, the trap function is indeed invoked, and I have all the PIDs of the background processes. The problem is with the actual killing, and here is why: The background processes are actually (zsh-) scripts, which do some setup (basically setting various environment variables), and then invoke a (Cygwin-)Ruby program which does the "real work". The program is executed by something like ruby myprog.rb (Note that this Ruby program is NOT invoked in background). When my SIGINT trap is entered, I can see from ps indeed the relationship between the processes involved, for instance 10852 9296 6224 10536 cons3 3672028 08:05:10 /usr/bin/ruby 9296 6224 6224 11236 cons3 3672028 08:05:10 /usr/bin/zsh The PID of my background process - the zsh wrapper - in this concrete case is 9296, and we can see that this is the parent of the Ruby process, 10852. The problem is that if I just kill 9296, the Ruby process keeps running, orphaned: 10852 1 6224 10536 cons3 3672028 08:05:10 /usr/bin/ruby I've found on Stackoverflow the suggestion to treat this as a process group and use negative PIDs. I tried this too, but it didn't work. Here is a similar example: 5548 10276 5812 2376 cons3 3672028 08:20:43 /usr/bin/ruby 10276 5812 5812 10312 cons3 3672028 08:20:43 /usr/bin/zsh If I do a kill -- -10276 I get the error message kill: -10276: No such process This happens both with the zsh-builtin kill and with /usr/bin/kill Is there a simple way to kill the zsh process in addition to the ruby process, or do I have to analyze the output of the ps command to manually find the PID of the Ruby process and kill it? Ronald -- Ronald Fischer http://www.fusshuhn.de/ -- Problem reports: http://cygwin.com/problems.html FAQ: http://cygwin.com/faq/ Documentation: http://cygwin.com/docs.html Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple