【问题标题】:Nodejs: Childprocess exec kill is not a functionNodejs:Childprocess exec kill 不是函数
【发布时间】:2019-01-03 12:09:22
【问题描述】:

我试图杀死一个用 exec 打开的子进程。从那以后我就不能使用 spawn,子进程似乎不起作用。

我错过了什么吗?子进程是不可杀死的吗?

提前致谢

*编辑:代码

    const child = exec(
     __dirname +
     "/ffmpeg/bin/ffmpeg -i " + url + " -acodec copy -vcodec copy " + savePath,
     function(error, stdout, stderr) {
      console.log("stdout: " + stdout);
      console.log("stderr: " + stderr);
      if (error !== null) {
        console.log("exec error: " + error);
      }
    }
  );

【问题讨论】:

  • 你能和我们分享一个示例代码吗?
  • 我用我使用的示例代码更新了问题
  • 你是如何试图杀死进程的?
  • exec 打开一个 shell 来执行你传递的命令。有些程序最终可能会独立于 shell 运行。你为什么不使用spawn
  • @TGrif:我尝试使用 process.kill() 和 process.stdin.write("q") (应该关闭命令),但两者都不起作用。

标签: node.js exec kill


【解决方案1】:

我发现,如果您尝试在事件回调中对子进程调用 kill ,则该子进程不在作用域内。我给你举个例子:

这不起作用:

const parameters = ['-D', '-F', `-W${width}`, `-H${height}`, fileName];
const childProcess = spawn('commandLineProgram', parameters)
.stderr.on('data', (data) => {
    stringToAccumulateData += data;
    if(data.toString().match(/stringLookingFor/)) {
        childProcess.kill();
    }
});

这将起作用:

const parameters = ['-D', '-F', `-W${width}`, `-H${height}`, fileName];
const childProcess = spawn('commandLineProgram', parameters);

childProcess.stderr.on('data', (data) => {
    stringToAccumulateData += data;
    if(data.toString().match(/stringLookingFor/)) {
        childProcess.kill();
    }
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-29
    • 1970-01-01
    • 2015-01-24
    • 2020-06-11
    • 2019-07-26
    • 1970-01-01
    • 2023-03-27
    • 1970-01-01
    相关资源
    最近更新 更多