Ruby,Windows,spawn - 如何救援资源暂时无法使用EAGAIN?

时间:2015-12-21 21:28:00

标签: ruby windows multithreading powershell

我必须在Windows上运行我的Ruby代码中的外部可执行文件,为此,我正在使用

Options -Indexes

<IfModule mod_rewrite.c>

    RewriteEngine On
    RewriteBase /

    # Force to exclude the trailing slash
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_URI} (.*)/$
    RewriteRule ^(.+)/$ $1 [R=307,L]

    # Restrict php files direct access
    RewriteCond %{THE_REQUEST} ^.+?\ [^?]+\.php[?\ ]
    RewriteRule \.php$ - [F]

    # Allow any files or directories that exist to be displayed directly
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d

    RewriteRule ^(.*)$ index.php?$1 [QSA,L]

</IfModule>

方法。
有时我必须经常运行相同的程序,它会很快执行,然后立即退出。我不会在几秒钟内运行该程序并不重要。

问题是 - 有时我会收到此错误:

    spawn  

我试图安全地拯救和/或阻止主要Ruby程序崩溃失败了我尝试过的任何方法,即使是这个例子:

C:/Program Files/Ruby22/lib/ruby/2.2.0/open3.rb:193:in `spawn': 
Resource temporarily unavailable - identify (Errno::EAGAIN)````

我无法得到正确的结果。

如何解救此案例或如何正确穿线/分叉并防止主程序崩溃?
(如果可能的话 - 不调整内核/其他参数以增加最大进程?)。

1 个答案:

答案 0 :(得分:1)

我通过仔细阅读Ruby Wiki

找到了
The parent process should use Process.wait to collect the termination
 status of its child or use Process.detach to register disinterest in their 
status; otherwise, the operating system may accumulate zombie processes.

如果我这样做,我就不会再犯这个错误了:

pid = spawn( "#{cmd}" )
Process.detach pid