【问题标题】:nodejs spawn a process in real shell and kill this processnodejs 在真正的 shell 中生成一个进程并杀死这个进程
【发布时间】:2016-12-08 08:45:00
【问题描述】:

我有一个在 nodejs 中使用 spawn 创建的进程,选项为 shell:true,因此该进程在真正的 shell 中启动。因此,当我尝试使用 streamingTask.kill() 终止此进程时,它不起作用。没有选项 shell:true 一切正常。

这就是我的代码的样子:

var options = {shell:true};  
streamingTask = spawn('gst-launch-1.0',args,options);

... 

streamingTask.kill()

那么我现在怎么才能杀死这个进程呢?

【问题讨论】:

  • streamingTask.exit(1); 不会成功吗?
  • 不,进程仍在运行
  • 也许你需要先结束它。试试这个:setTimeout(function() { streamingTask.end(); StreamingTask.close(); }, 2000);
  • nope streamingTask.end() 和 .close 也没有停止进程
  • 暂停和终止方法也不起作用。

标签: node.js shell spawn


【解决方案1】:

这不起作用,因为您正在杀死 shell 进程本身,而不是 shell 生成的子进程(在您的情况下为 gst-launch-1.0)。

npm 上有一个名为 tree-kill 的包,它提供了一个简单的单行解决方案:

var kill = require('tree-kill');
kill(streamingTask.pid);

【讨论】:

  • 为什么这么复杂?这不应该是默认行为>
  • kill(process.pid) 对我不起作用,它将树保留在外壳之后。但是这个评论为我解决了这个问题。我做kill(spawnedprocess.pid)
猜你喜欢
  • 1970-01-01
  • 2010-09-08
  • 1970-01-01
  • 2012-09-08
  • 1970-01-01
  • 2013-07-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多