求助:关于child_process中的exec
发布于 2个月前 作者 jcpwfloi 310 次浏览 来自 问答

我们不妨设现在有一个需要运行2.3s左右的程序。它在同目录下。./1可以执行它, 我们给它重定向输入输出,但是这个程序有时间限制,一旦超过时间限制我们需要立马终结它。

    var cp = require('child_process');
    var child = cp.exec(__dirname + '/1 < in > tempout', function(err, stdout, stderr) {
        clearTimeout(timer);
    });
    var timer = setTimeout(function() {
        child.kill();
    }, 1000);

然后我尝试了这样一个代码,发现无论如何程序还是会在2.3s后正常输出到tempout。

    var cp = require('child_process');
    cp.exec(__dirname + '/1 < in > tempout', {timeout: 1000, killSignal: 'SIGTERM'}, function(err, stdout, stderr) {
    });

仍然和上述情况相同。。不知道为啥,跪求解答。

2 回复

exec只是个传话器,并不负责实际的内容运行。

nodejs调用exec告诉OS: 需要运行OS的哪条指令。然后OS开动一个进程去干活,干完活把结果发回nodejs。 nodejs本身也属于OS其中的一条进程。

个人猜测:exec 会启动一个 shell, 当 kill 的时候实际上是在 kill 这个 shell, 所以 shell 启动的子进程不会被正确地结束。 因此建议使用 spawn 代替 exec.

回到顶部