防止 Raku 中文件描述符泄漏所需的建议

cow*_*moo 9 pipe process file-descriptor thread-safety raku

背景

不久前,我编写了一个Raku 模块来测试我对制作外部流程管道(例如,grep raku | wc -l)的一些想法。我遵循了为外部进程创建Pipes和设置I/O重定向的传统方式。

由于forkin 中没有可用Raku,也没有由于线程中的线程而被推荐MoarVM,因此我求助于使用Proc::Async为管道中的每个外部命令启动包装器进程,然后包装器将设置I/O重定向以连接命令进程和管道,并且然后在exec-ing 真正的命令之前关闭其他 FD 。

问题

这一切似乎都运行良好,除了使用该模块的程序的其他部分仍有可能在管道创建之后但在关闭之前在另一个线程中启动子进程(例如,通过runshellProc、 或Proc::AsyncFDs,从而导致泄漏它们并导致管道中的命令进程阻塞read / write

您将如何防止FDs泄漏到在另一个线程中启动的任何子进程Raku

谢谢