控制Node中的特定进程ID?

时间:2014-02-25 07:38:29

标签: javascript node.js process child-process command-line-interface

我正在开发一个节点应用程序,允许客户端控制在服务器上运行的程序。程序必须始终在自己的终端窗口上运行。理想情景概述如下:

客户点击按钮 - >命令在终端运行程序中运行 - >程序做了一些事情

我对节点不太熟悉,但我知道我可以使用ChildProcess事件发射器运行命令行脚本。我遇到的问题是如何告诉节点在特定进程(即运行我正在尝试操作的程序的进程)上运行命令。有没有办法在特定进程ID上执行命令?有没有办法检测所有当前进程及其ID?

非常感谢任何建议或指示。

1 个答案:

答案 0 :(得分:0)

创建子进程时,可以将其分配给变量,以便以后可以引用它。在这种情况下,您可能希望将其添加到对象或数组中,以便可以引用一组正在运行的进程。

有关示例,请参阅spawnexec的文档。

向创建的子进程发送命令的一种方法是使用signals,例如child.kill('SIGSOMETHING');

例如:

var spawn = require('child_process').spawn;

function spawnChild() {
  var cmd = spawn('cmd', ['-p1', 'param']);

  cmd.stdout.on('data', function (data) {
    console.log('stdout: ' + data);
  });

  cmd.stderr.on('data', function (data) {
    console.log('stderr: ' + data);
  });

  cmd.on('close', function (code) {
    console.log('child process exited with code ' + code);
  });

  // Save a reference to this child
  children.push(cmd);
}

// Spawn 5 children
for (var i = 0; i < 5; i++) {
  spawnChild();
}

// Send a signal after 5 seconds
setTimeout(function(){
  for (var i in children) {
    var child = children[i];
    console.log('Sending signal to child with PID: ' + child.pid);
    child.kill('SIGSOMETHING');
  }
}, 5000);