Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

Re: Anyone familiar with auto-fu.zsh project?



On 12 June 2018 at 03:55, Eric Freese <ericdfreese@xxxxxxxxx> wrote:
> Do you know if there is any way to get the PID of the process spawned for
> process substitution? It looks like `$!` doesn't hold it as it does in bash.
>
> Ideally I could kill these child processes when they're no longer needed so
> that long-running ones don't tie up resources unnecessarily.

I recall very weakly that this appeared for a moment when writing the
logger – that <( ) process likes to survive much. I think main method
is that the spawned function exits. But you seem to want both short
running processes that exit by themselves and long running processes,
that do not exit. My logger exits after configurable amount of
seconds, like 20 of not receiving new logs (I have opposite pipe
direction) or when not log but special exit-string is written to the
named pipe. Found the code:

# Cannot write newline (newline alone is ignored, not logged)? Then cleanup
(( $ZFLAI_FD )) && { builtin print -r -u$ZFLAI_FD 2>&$ZFLAI_NULL_FD ||
{ builtin exec {ZFLAI_FD}>&-; ZFLAI_FD=0; }; }

# Running, but dangerously close to idle-exit moment?
if (( ZFLAI_FD != 0 && ZFLAI_LAST_ACTION + ZFLAI_KEEP_ALIVE - 10 <
EPOCHSECONDS )); then
    builtin print -u$ZFLAI_FD '!ZFLAI-SPECIAL-CMD: exit' 2>/dev/null
    builtin exec {ZFLAI_FD}>&-
    ZFLAI_FD=0
fi

I had to do that protected race condition and request exit when close
to idle exit – this way it is certain that the following, actual
message will not be written during the short window between checking
that <( ) process is alive, and the process being in state of exiting
during that check.

Maybe this will suggest something. I'm busy and cannot switch to other
project right now, I probably will have time tomorrow, so I can fiddle
with this and maybe find something for opposite pipe direction. Maybe
someone knows a trick to open bidirectional named pipe(s) for <( )?
Exec can do {FD}<> <(...), can't remember if I checked this, but
rather yes, checked now and it seems to not work.

Maybe this: long-running process outputs message "EXIT?" every 5
seconds. When write to stdout fails, then exit. But named pipes are
quite distinct, not sure if the write will fail after doing exec
{FD}<&- done on the client, interactive side.

> On Mon, Jun 11, 2018 at 3:46 AM, Sebastian Gniazdowski
> <sgniazdowski@xxxxxxxxx> wrote:
>>
>> On 11 June 2018 at 10:25, Eric Freese <ericdfreese@xxxxxxxxx> wrote:
>> > Wow this is much nicer. I've implemented on `develop` branch of
>> > zsh-autosuggestions.
>>
>> Decided to do the testing, it's just checkout of develop branch and
>> then normal everyday use. First impression was that suggestions appear
>> very quickly, faster than with zpty.
>>
>> > Thank you!
>>
>> n/p, I use this in unpublished logger. Background process is started
>> on demand with <( ), which happens when someone logs something with
>> zflai-log. It stores to SQLite, MySQL, ElasticSearch, plain file. All
>> works without any problems, and logging into <( ) spawned process has
>> negligible duration, that's the point – someone wants MySQL logs but
>> do not want slowdown.
>>
>> > Eric Freese
>> > 303 875 2359
>> >
>> > On Sun, Jun 10, 2018 at 11:24 PM, Sebastian Gniazdowski
>> > <sgniazdowski@xxxxxxxxx> wrote:
>> >>
>> >> Hello,
>> >> I've just implemented async feature without using zpty. From what I
>> >> saw zsh-autosuggestions uses zpty to look-up the suggestion. Maybe it
>> >> has some drawbacks and you would be interested in using <( ) instead
>> >> of zpty (it's probably still required to capture completions, though)?
>> >> It's similar to using zpty:
>> >>
>> >> exec {PCFD}< <(-fast-highlight-check-path)
>> >> zle -F -w "$PCFD" fast-highlight-check-path-handler
>> >>
>> >> -fast-highlight-check-path-handler() {
>> >>     if read -r -u "$PCFD" line; then
>> >>     ...
>> >>     fi
>> >>     zle -F ${PCFD}
>> >>     exec {PCFD}<&-
>> >> }
>> >>
>> >> <( ) process is automatically disowned, I've used it in 2 projects and
>> >> it works without problems, very robust. The effect:
>> >>
>> >> https://asciinema.org/a/V18uHIn2BR0OVfRsmxyqkVi7K
>> >>
>> >> --
>> >> Best regards,
>> >> Sebastian Gniazdowski
>> >
>> >
>
>



Messages sorted by: Reverse Date, Date, Thread, Author