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 >