Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
Re: kill the LHS command of a pipe once the RHS command terminates
On 2019-07-29 08:54:19 -0700, Bart Schaefer wrote:
> On Mon, Jul 29, 2019 at 8:24 AM Vincent Lefevre <vincent@xxxxxxxxxx> wrote:
> >
> > On 2019-06-28 13:04:30 +0200, Vincent Lefevre wrote:
> > >
> > > zira% head -n 1 <(echo foo; sleep 3; echo err >&2)
> > > foo
> >
> > Another issue is that if the producer side tries to access the terminal
> > (e.g. ssh, for a passphrase), all the processes of this side are stopped
> > due to a SIGTTOU signal.
>
> Even if they weren't stopped by TTOU, they'd almost certainly be
> stopped by TTIN.
Yes.
> > 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.
> If you want it run in the foreground, use =(...).
That's not OK, because the main command is started only when
the =(...) command terminates:
zira% echo =(echo a; sleep 3; echo b)
gives its output (the temporary file) only after 3 seconds. And even
without this problem, I'm not sure that this would work with a pager,
as it would think that once a EOF has occurred, there is no more
output.
> > Later there's a mention of it being run asynchronously, but this
> > term has never been defined.
>
> In the JOBS section:
>
> If the MONITOR option is set, an interactive shell associates
> a job with each pipeline. It keeps a table of current jobs,
> printed by the jobs command, and assigns them small integer
> numbers. When a job is started asynchronously with `&', the
> shell prints a line to standard error which looks like:
[...]
As described, the "asynchronously" concerns only jobs started with "&".
BTW, there is nothing in the job table:
zira% echo <(sleep 3); jobs
/proc/self/fd/11
zira%
> And then in the SIGNALS section:
>
> Certain jobs are run asynchronously by the shell other than
> those explicitly put into the background;
It says that jobs explicitly put into the background are run
asynchronously, but nothing about the converse.
--
Vincent Lefèvre <vincent@xxxxxxxxxx> - Web: <https://www.vinc17.net/>
100% accessible validated (X)HTML - Blog: <https://www.vinc17.net/blog/>
Work: CR INRIA - computer arithmetic / AriC project (LIP, ENS-Lyon)
Messages sorted by:
Reverse Date,
Date,
Thread,
Author