From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 20927 invoked by alias); 10 Apr 2018 13:59:50 -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: 42619 Received: (qmail 6517 invoked by uid 1010); 10 Apr 2018 13:59:50 -0000 X-Qmail-Scanner-Diagnostics: from mailout2.w1.samsung.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(210.118.77.12):SA:0(-6.9/5.0):. Processed in 15.205341 secs); 10 Apr 2018 13:59:50 -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=-6.9 required=5.0 tests=BAYES_00,RCVD_IN_DNSWL_HI, SPF_HELO_PASS,SPF_PASS,T_DKIM_INVALID autolearn=ham autolearn_force=no version=3.4.1 X-Envelope-From: p.stephenson@samsung.com X-Qmail-Scanner-Mime-Attachments: | X-Qmail-Scanner-Zip-Files: | DKIM-Filter: OpenDKIM Filter v2.11.0 mailout2.w1.samsung.com 20180410135930euoutp023b08eca34314739f57a443290a1de854~kF9NY6Q1T0116101161euoutp02d DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1523368770; bh=gyYCviSQ6gl/2+9ivwu0MmCMOO7AzxZHMTMR7jLnMvc=; h=Date:From:To:Subject:In-reply-to:References:From; b=oXIlXqWIQw06gn02IEpapOqklAYxhwbHc2bHyHGu8GTldwWgZDYAcuQAeGxkTlV54 2gvkRaUH8+5vWDRuaA/CY2+Vs1407r9aK1EQLOlQJqIwYA4hO91g/DbHrgABQa4GIQ KBVho6JBvbla8HzMWG/V3tsgLgWdSCpdIss2sr6Q= X-AuditID: cbfec7f2-1dbff70000011644-70-5accc340b8cf Date: Tue, 10 Apr 2018 14:59:26 +0100 From: Peter Stephenson To: Zsh hackers list Subject: Re: "echo | ps -j $(:) | cat | cat | cat" runs components in different process groups Message-id: <20180410145926.64c4f671@camnpupstephen.cam.scsc.local> In-reply-to: <20180410124545.13fccd5d@camnpupstephen.cam.scsc.local> Organization: SCSC X-Mailer: Claws Mail 3.13.2 (GTK+ 2.24.30; x86_64-pc-linux-gnu) MIME-version: 1.0 Content-type: text/plain; charset="US-ASCII" Content-transfer-encoding: 7bit X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFnrCIsWRmVeSWpSXmKPExsWy7djP87oOh89EGUx7bGxxsPkhkwOjx6qD H5gCGKO4bFJSczLLUov07RK4Mi5svcha8E+kYnbnbaYGxg0CXYycHBICJhJv/z1n7mLk4hAS WMEo8XLtGjYIp5dJYsr9lewwVRN+TmGHSCxjlFh3uwfKmcYkMXn3I1YI5wyjxKaD76GGXWCU aLywDcjh4GARUJX426QLMopNwFBi6qbZjCC2iICWxI6TJ5lAbGGBBImze3aA2bwCzhLnXh9j BrE5BVwknl/ZBzaGX0BI4kKzLcRF9hJH95yEKheU+DH5HguIzSygI7Ft22N2CFteYvOat8wQ 9TPYJI5cM4KwXSSuLu+FigtLvDq+BepLGYnOjoNMIOdLCDQzSqy9f58NItHDKDFrcSiEbS3R d/siI8QCPolJ26aD3SYhwCvR0SYEUeIhce3SZ6iZjhKr9rZBw+cfk8TfN89YJjDKz0Jy9ywk d89CcvcCRuZVjOKppcW56anFhnmp5XrFibnFpXnpesn5uZsYgXF/+t/xTzsYv15KOsQowMGo xMM74eDpKCHWxLLiytxDjBIczEoivDlrz0QJ8aYkVlalFuXHF5XmpBYfYpTmYFES543TqIsS EkhPLEnNTk0tSC2CyTJxcEo1MJbK9RfvDpjlbrt6gUvO2itHfjT9mNCiHaH391OswsIF/6f9 kDryNeHWzJOuU84YbnrXeMZv292Jyr1vH/KtSEqYxvKnYF5KdscjzcZ3jDe9d0y5ar7iQXS7 yNX/ybzqyxxC3u/qP3RdYYXuatFl5/m1zF0FeGOmJj83nX7ETUzucGQjw5d0MwUlluKMREMt 5qLiRACd4x2p9wIAAA== X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFjrMLMWRmVeSWpSXmKPExsVy+t/xq7oOh89EGTQ+5LA42PyQyYHRY9XB D0wBjFFcNimpOZllqUX6dglcGRe2XmQt+CdSMbvzNlMD4waBLkZODgkBE4kJP6ewdzFycQgJ LGGUaFrynxHCmcEkcenYBFYI5xyjxOfzC5ggnAuMEp3fbwL1cHCwCKhK/G3SBRnFJmAoMXXT bEYQW0RAS2LHyZNMILawQILEoicTwOK8As4S514fYwaxOQVcJJ5f2ccMMfMfk8TU6U+YQWby CwhJXGi2hTjPXuLoHog5vAKCEj8m32MBsZmB5m/e1sQKYctLbF7zFmymkIC6xI27u9knMArN QtIyC0nLLCQtCxiZVzGKpJYW56bnFhvqFSfmFpfmpesl5+duYgQG7bZjPzfvYLy0MfgQowAH oxIP74SDp6OEWBPLiitzDzFKcDArifDmrD0TJcSbklhZlVqUH19UmpNafIhRmoNFSZz3vEFl lJBAemJJanZqakFqEUyWiYNTqoEx8ME8rQf3HIQlDEvbCv8dXZHTv/nI6tdHD0mtmSEffrOD y7PNgUFt4qu05dffhosFTJVbfXLnjvw6R+8Xx216mxd1Jn49/LgpPrfJpdDQi8lEY+KZUu19 Ra/4Hfe8+bg8T99/g8i5CRXeRSk5W27eNPdzXyItUPP8IL+SBLdp4pUHjCv0A8yUWIozEg21 mIuKEwFYps0ZVgIAAA== X-CMS-MailID: 20180410135928eucas1p20adb263a8f875c24c28563ea98ef10bf X-Msg-Generator: CA CMS-TYPE: 201P X-CMS-RootMailID: 20180324221021epcas1p184507a6328dbd505b97db69c1f9d8194 X-RootMTR: 20180324221021epcas1p184507a6328dbd505b97db69c1f9d8194 References: <20180323161612.GB4857@chaz.gmail.com> <180323163614.ZM10192@torch.brasslantern.com> <180323221959.ZM27569@torch.brasslantern.com> <20180324080514.txxyrb3qiztu4pqt@gmail.com> <180324150945.ZM32251@torch.brasslantern.com> <20180410124545.13fccd5d@camnpupstephen.cam.scsc.local> On Tue, 10 Apr 2018 12:45:45 +0100 Peter Stephenson wrote: > On Sat, 24 Mar 2018 15:09:44 -0700 > Bart Schaefer wrote: > > On Mar 23, 10:05pm, Joey Pabalinas wrote: > > } > > } > It could be I just haven't constructed the right test. > > } > > } It's kind of an *incredibly* unlikely edge-case but FWIW: > > } > > } > $ echo | ps -j $(: $(cat)) | cat | cat | cat > > } > > } The shell _seems_ to completely lock up after applying your patch; > > on } my zsh 5.4.2 release version there are no problems (aside from > > the } original process group leader issues). > >... [Stuff about the process group aspects I'm not discussing here] ... I think all this still applies, but I've nothing new to add, so I've edited it down to keep the messages manageable. > But looking at ps output while ^C is failing to have any effect > suggests things are worse than that. I think at this point the > parent shell hasn't actually reaped the echo (it's ), so > hasn't executed this chunk of code. That's got something to do with > the fact that it's got child reaping blocked while trying to read > output from the the $(: ...) process --- it's executing the same code > as the forked shell waiting for the cat. However, even simple-minded > child unblocking didn't seem to cause the zombie to go away, at which > point I got stuck. OK, the following change --- also too simple for the real world, so treat as proof of concept --- *does* make this case interruptible. I was forgetting that child_unblock() wasn't enough, you need to ensure signals aren't queued. So I suppose we need a way of making this safe(r)... pws diff --git a/Src/exec.c b/Src/exec.c index e154d12..c22d37d 100644 --- a/Src/exec.c +++ b/Src/exec.c @@ -4543,11 +4543,15 @@ getoutput(char *cmd, int qt) return NULL; } else if (pid) { LinkList retval; + int q = queue_signal_level(); zclose(pipes[1]); + dont_queue_signals(); + child_unblock(); retval = readoutput(pipes[0], qt, NULL); fdtable[pipes[0]] = FDT_UNUSED; waitforpid(pid, 0); /* unblocks */ + restore_queue_signals(q); lastval = cmdoutval; return retval; } diff --git a/Src/signals.c b/Src/signals.c index 94f379e..f86ae54 100644 --- a/Src/signals.c +++ b/Src/signals.c @@ -537,6 +537,11 @@ wait_for_processes(void) #else update_process(pn, status); #endif + if (pn->pid == jn->gleader) { + jn->gleader = 0; + /* HERE: check this was actually in foreground... */ + attachtty(mypgrp); + } } update_job(jn); } else if (findproc(pid, &jn, &pn, 1)) {