Zsh Mailing List Archive
Messages sorted by:
Re: kill the LHS command of a pipe once the RHS command terminates
- X-seq: zsh-users 24110
- From: Bart Schaefer <schaefer@xxxxxxxxxxxxxxxx>
- To: Zsh Users <zsh-users@xxxxxxx>
- Subject: Re: kill the LHS command of a pipe once the RHS command terminates
- Date: Mon, 29 Jul 2019 17:00:30 -0700
- Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=brasslantern-com.20150623.gappssmtp.com; s=20150623; h=mime-version:references:in-reply-to:from:date:message-id:subject:to; bh=ty5Dp0tsn/ItUraIuYaWqg+uOFrf6VqRWuukBip4EQc=; b=PzoqRpTSnqb39XjdC5jmn+mYHbJ1SBGgoDKlevtCFIExaeEmqZxpa8f17lF1B692/Y 7HKvPaXNtyBbMkKsYL/X4B7g6XaUZz1TccltCQbUp22NNHDmjGg4kIm6pYngEta+wEop 0lqKQplVX4mKJUJL6QUkHD2SxFjYifvxbQEpMdo1JardtN8BbGkRk0FEpMZ8Gjsd0XpZ AlofTzyqN3ua5MR5E5Lt7HvapWInoNpVBrQ4Ex+XdjxiPST9BQo1Y0OWrqSdsxYbqJL3 wCJL+5uA7NNBpRjDpDofpVup/vs3CdY82gzAKBEoufdQEK4IQ5EcuJW/mguW1XIPKHIO yEdA==
- In-reply-to: <20190729204857.GA28524@zira.vinc17.org>
- List-help: <mailto:email@example.com>
- List-id: Zsh Users List <zsh-users.zsh.org>
- List-post: <mailto:firstname.lastname@example.org>
- List-unsubscribe: <mailto:email@example.com>
- Mailing-list: contact zsh-users-help@xxxxxxx; run by ezmlm
- References: <20190628110430.GA13790@zira.vinc17.org> <20190729152309.GA17940@cventin.lip.ens-lyon.fr> <CAH+w=7a8aBsxdF1Otwvbm7eWe=BC2T0Ny87j+sY5QW7oXM=j_Q@mail.gmail.com> <20190729204857.GA28524@zira.vinc17.org>
On Mon, Jul 29, 2019 at 1:50 PM Vincent Lefevre <vincent@xxxxxxxxxx> wrote:
> > > Concerning the documentation, the zshexpn(1) man page does not say
> > > that a process in process substitution is run in background.
> > They have to be, otherwise either you'd need unlimited buffering or
> > the read of the descriptor could deadlock.
> I don't see how this is related to buffering. This would be the same
> case as with a pipe (cmd1 | cmd2), for which both commands run in
> foreground and there are no buffering issues.
You're wrong about this. In (cmd1 | cmd2), zsh forks off cmd1 into
its own process. It is effectively "in the background" even though
the entire pipeline is considered to be in the foreground; the only
process that is really "in the foreground" is cmd2. If cmd2 stops
reading its stdin, cmd1 will eventually either block or get a SIGPIPE.
If both processes were in the foreground, they could get into a state
where neither can make any progress. The same is true with <(...).
(Aside, in bash/ksh93 (cmd1 | cmd2) puts cmd2 in a forked process
instead, and keeps cmd1 in control.)
> It says that jobs explicitly put into the background are run
> asynchronously, but nothing about the converse.
I'm not sure how you get "nothing about the converse" from "Certain
jobs are run asynchronously ... OTHER THAN THOSE explicitly put into
the background;" ("other than" refers to "certain jobs" that are
asynchronous but "(not) explicitly" backgrounded) and "Examples of
such asynchronous jobs are process substitution" ... but in any case
this was one of those cases where the zsh manual assumed you know how
"most" shells work and therefore what these terms mean, and that it
only had to explain what it might be doing differently. The whole
manual page used to be written this way and we are only gradually
turning it into a standalone reference.
Messages sorted by: