如何在node.js中清除child_process.spawn()上的子进程

时间:2013-02-21 09:56:01

标签: javascript node.js

以下代码:

#!/usr/bin/env node
"use strict";

var child_process = require('child_process');

var x = child_process.spawn('sleep', [100],);

throw new Error("failure");

生成子进程并退出而不等待子进程退出。

我该怎么办?我想调用waitpid(2)但是child_process似乎没有waitpid(2)。

增加:

抱歉,我真正想要的是在父级存在时终止子进程,而不是等待它。

2 个答案:

答案 0 :(得分:13)

#!/usr/bin/env node
"use strict";

var child_process = require('child_process');

var x = child_process.spawn('sleep', [10]);

x.on('exit', function () {
    throw (new Error("failure"));
});

编辑:

您可以通过向主process添加监听器来监听主要流程,例如process.on('exit', function () { x.kill() })

但抛出这样的错误是一个问题,您最好通过process.exit()

关闭该过程
#!/usr/bin/env node
"use strict";

var child_process = require('child_process');

var x = child_process.spawn('sleep', [100]);

process.on('exit', function () {
    x.kill();
});

process.exit(1);

答案 1 :(得分:3)

#!/usr/bin/env node
"use strict";

var child_process = require('child_process');

var x = child_process.spawn('sleep', [10]);

process.on('exit', function() {
  if (x) {
    x.kill();
  }
});