Thanks a lot Alex, with the "wait" is working fine!

Cheers,
Davide

On Tue, Aug 4, 2020, 16:42 Alexander Burger <a...@software-lab.de> wrote:

> Hi Davide,
>
> > I have encountered a strange behavior while running some pipes (the
> number
> > of "do" iterations may require some adjustment to trigger the effect):
> > (do 10000 (pipe (prin "A string") (make (while (rd 1) (link @)))))
> >
> > The execution stops with an error like this (the actual number may vary)
> > ? 1345 FD too high
> >
> > In Termux this happened with something as low as 300. Note also that in
> > Termux I have a pretty high number of files that can be open at the same
> > time (~65K).
> >
> > I would expect that the file descriptors are closed after the pipe
> > execution.
>
> This is correct, but it takes a while. After the pipe'd child process
> terminated, the Linux kernel sends a SIGCHLD signal to the parent process,
> which
> then does a waitpid() system call in the signal handler.
>
> So it is necessary not to create too many child processes at the same
> time. The
> above should work if you add a short delay, e.g.
>
>    (do 10000
>       (pipe (prin "A string")
>          (make (while (rd 1) (link @))) )
>       (wait 10) )
>
> ☺/ A!ex
>
> --
> UNSUBSCRIBE: mailto:picolisp@software-lab.de?subject=Unsubscribe
>

Reply via email to