From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 29495 invoked by alias); 5 Jan 2018 12:46:10 -0000 Mailing-List: contact zsh-workers-help@zsh.org; run by ezmlm Precedence: bulk X-No-Archive: yes List-Id: Zsh Workers List List-Post: List-Help: List-Unsubscribe: X-Seq: 42226 Received: (qmail 1015 invoked by uid 1010); 5 Jan 2018 12:46:10 -0000 X-Qmail-Scanner-Diagnostics: from mail-wm0-f52.google.com by f.primenet.com.au (envelope-from , uid 7791) with qmail-scanner-2.11 (clamdscan: 0.99.2/21882. spamassassin: 3.4.1. Clear:RC:0(74.125.82.52):SA:0(-1.9/5.0):. Processed in 1.26508 secs); 05 Jan 2018 12:46:10 -0000 X-Spam-Checker-Version: SpamAssassin 3.4.1 (2015-04-28) on f.primenet.com.au X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,FREEMAIL_FROM, RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H3,RCVD_IN_MSPIKE_WL,SPF_PASS, T_DKIM_INVALID autolearn=ham autolearn_force=no version=3.4.1 X-Envelope-From: stephane.chazelas@gmail.com X-Qmail-Scanner-Mime-Attachments: | X-Qmail-Scanner-Zip-Files: | DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=date:from:to:subject:message-id:mail-followup-to:mime-version :content-disposition:user-agent; bh=R3dsusCXLyoelvx4h4OVTHVnQgw6Vj77vdMIMI2Ap+s=; b=Jg8dMYuV2QhCrMcHmSezY5Yf0EmrH8y8sI/4ZQWSWyo/fFLv6BjSoOze02UShDE2nj N9Gl1ycIuob3LgEjWWe5+3smcPeN5ypY4alzTqUjzFuzH0jdCwwEeIsG8QPDR9CRKFYZ RsgUoODRsBidfUSZvJ6tP8jB1XzaCawQe8fhEH+nWg798fBUde0gT5JLDCuwrnbr8FZX ofaSHWSfiabO+00fGnZ1lxL65Sp6WdcUum9ympXb1n/0cQFKDVxZGG1wYnCsG1yTI7Mi Q0/lLKXc2BzAX660Nck9z2jh9Oo85oxgiBz7a4AaQRlZ3vmgOu9Eyb5GPP48BWJn9jap FARw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:subject:message-id:mail-followup-to :mime-version:content-disposition:user-agent; bh=R3dsusCXLyoelvx4h4OVTHVnQgw6Vj77vdMIMI2Ap+s=; b=Z38yJ4Q0H4ihV6CVYmFogE8uNtLrGxBJmk2GSVjOhTTQDBAGLvC+tAtpJIbW4zoIGc 3eYjuuTXJbH4pwsNix1LAuucsCedPga4VWaEhDW8NRd8AvMMAJm4fq8MD4aUs3eHD51d 2TH2cGbqijtSOw5zMPdir9Vqxiy4exo0oBXEm/NDAcT9TyGgYB1b9urVLbL634cExhyd n1aj649ZUP6ulGPHYHJ5xucAv7TrafOGjNjTaeNpTNRsC8YQDIK8fXyy6rn+wedl9B86 tWL4rtELd6TkzFCf1p6kKxbi7iNzIM6D3G7hoSU2E/tJESraBJ9XxF5mnk/5somYcnna nqCg== X-Gm-Message-State: AKGB3mKGNTEEFumU/HDDNAhP6Js0C+L2hYgnPrIc/b55AS5tqs9ggZDd fKHPBSU7gBhOkAOAD+ffJQiCkw== X-Google-Smtp-Source: ACJfBot3qxs+TLwJ+vS2oZOPwyiiUnKa1SIZ9D77qV9HifoRxodUAiNasQBlnJmhTFge8qLKGDA8vQ== X-Received: by 10.80.222.66 with SMTP id a2mr3900085edl.236.1515156364454; Fri, 05 Jan 2018 04:46:04 -0800 (PST) Date: Fri, 5 Jan 2018 12:46:02 +0000 From: Stephane Chazelas To: Zsh hackers list Subject: kill %jobspec tries to kill dead processes Message-ID: <20180105124602.GB16078@chaz.gmail.com> Mail-Followup-To: Zsh hackers list MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.5.24 (2015-08-30) Hi, kill %jobspec usually avoids the problem when kill $pid may kill the wrong process when it may have been reused. However, in: sleep 1 | sleep 3 & sleep 2 kill %"sleep 1" kill still tries to kill the process that was running sleep 1 even though the shell knows it has died: $ strace -e kill zsh -c 'sleep 1 | sleep 3 & ps -f; sleep 2; printf "%s => %s\n" "${(@kv)jobstates}"; kill %"sleep 1"' UID PID PPID C STIME TTY TIME CMD chazelas 8175 14816 0 12:37 pts/4 00:00:00 strace -e kill zsh -c sleep 1 | sleep 3 & ps -f; sleep 2; printf "%s => %s\n" "${(@kv)jobstates}"; kill %"sleep 1" chazelas 8177 8175 0 12:37 pts/4 00:00:00 zsh -c sleep 1 | sleep 3 & ps -f; sleep 2; printf "%s => %s\n" "${(@kv)jobstates}"; kill %"sleep 1" chazelas 8178 8177 0 12:37 pts/4 00:00:00 sleep 1 chazelas 8179 8177 0 12:37 pts/4 00:00:00 sleep 3 chazelas 8180 8177 0 12:37 pts/4 00:00:00 ps -f chazelas 14816 14812 0 Jan03 pts/4 00:00:01 /bin/zsh --- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=8180, si_uid=1000, si_status=0, si_utime=0, si_stime=2} --- --- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=8178, si_uid=1000, si_status=0, si_utime=0, si_stime=0} --- --- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=8181, si_uid=1000, si_status=0, si_utime=0, si_stime=0} --- 1 => running:+:8178=done:8179=running kill(8178, SIGTERM) = -1 ESRCH (No such process) kill(8179, SIGTERM) = 0 +++ exited with 0 +++ See how 8178 was known to be "done", but is still killed. mksh has the same issue. bash is worse in that it doesn't attempt to kill the sleep 3 process. ksh93 segfaults when I try the same thing there. -- Stephane