小编mwe*_*ate的帖子

产生node.js子进程导致云代工厂的僵尸进程

我有一个node.js应用程序,我想使用下面列出的代码生成子进程.

当我在本地运行此应用程序时,每个'ps'命令都可以很好地触发关闭和退出事件.然而,在我们的云代工厂(pivotal.io)应用程序中,触发了stdout.close,但子进程的"关闭"和"退出"事件本身从未发生过.此外,进程仍然作为内存中的僵尸进程(因此在~500请求之后服务器因E_SPAWN错误而死亡).因此,似乎永远不会触发node.js进程句柄中的退出处理程序,从而导致未读取子进程的退出代码.

这可能与容器监狱长,cgroups ......有关吗?有没有人有这方面的解决方案或至少遇到同样的问题?

测试代码:

var cp = require('child_process');

//..create express app

app.get('/foo/', function(req, res, next) {
    var child = cp.spawn("ps",["aux"]);
    child.stderr.pipe(process.stderr);

    child.stdout.on('data', function(data) {
        console.log('data');
        res.send("\n<br>OUT" + data.toString());
    });

    child.stdout.on('close', function() {
        console.log('close stdout');
        res.send("\n<br>CLOSE STDOUT");
    });

    child.on('close', function() {
        console.log('close');
        res.send("\n<br>CLOSE");
    });

    child.on('exit', function() {
        console.log('exit');
        res.send("\n<br>EXIT");
    });
});

app.listen();
Run Code Online (Sandbox Code Playgroud)

示例ps aux输出:

<br>OUTUSER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.0   1124   308 ?        S<s  14:15   0:00 wshd: 189gaonkujh    
vcap …
Run Code Online (Sandbox Code Playgroud)

child-process node.js cloud-foundry

12
推荐指数
1
解决办法
2035
查看次数

标签 统计

child-process ×1

cloud-foundry ×1

node.js ×1