ruby:如何获取正在运行的子进程(fork)的数量
我想将子进程数限制为 3。一旦达到 3,我就会等到其中一个进程停止,然后执行一个新进程。我正在使用 Kernel.fork 来启动该过程。
如何获取正在运行的子进程的数量?或者有更好的方法来做到这一点吗?
I want to limit the subprocesses count to 3. Once it hits 3 i wait until one of the processes stops and then execute a new one. I'm using Kernel.fork to start the process.
How do i get the number of running subprocesses? or is there a better way to do this?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
这是一个很好的问题,但我认为 Ruby 中没有这样的方法,至少在标准库中没有。那里有很多宝石......
这个问题听起来像是 Mutex 类的工作。请在此处查找条件变量部分,了解如何使用 Ruby 的互斥体。
A good question, but I don't think there's such a method in Ruby, at least not in the standard library. There's lots of gems out there....
This problem though sounds like a job for the Mutex class. Look up the section Condition Variables here on how to use Ruby's mutexes.
我通常有一个要完成的任务队列,然后有几个线程消耗任务,直到它们收到指示工作结束的项目。 Thread 库下的“Programming Ruby”中有一个示例。 (我不确定是否应该将示例复制并粘贴到 Stack Overflow - 抱歉)
I usually have a
Queue
of tasks to be done, and then have a couple of threads consuming tasks until they receive an item indicating the end of work. There's an example in "Programming Ruby" under the Thread library. (I'm not sure if I should copy and paste the example to Stack Overflow - sorry)我的解决方案是使用 trap("CLD"),每当子进程结束时捕获 SIGCLD 并减少正在运行的进程的计数器(全局变量)。
My solution was to use trap("CLD"), to trap SIGCLD whenever a child process ended and decrease the counter (a global variable) of processes running.