我想将子进程数限制为3.一旦命中3,我就等到其中一个进程停止然后再执行一个进程。我正在使用Kernel.fork来启动这个过程。
如何获取正在运行的子进程数?或者有更好的方法吗?
答案 0 :(得分:1)
一个很好的问题,但我认为Ruby中没有这样的方法,至少在标准库中没有。那里有很多宝石......
这个问题虽然听起来像是Mutex类的工作。查看条件变量here部分,了解如何使用Ruby的互斥锁。
答案 1 :(得分:0)
我通常要完成Queue
个任务,然后让几个线程消耗任务,直到他们收到指示工作结束的项目。在Thread库下的“Programming Ruby”中有一个例子。 (我不确定是否应该将示例复制并粘贴到Stack Overflow上 - 抱歉)
答案 2 :(得分:0)
我的解决方案是使用陷阱(“CLD”),在子进程结束时捕获SIGCLD并减少正在运行的进程的计数器(全局变量)。