【问题标题】:NodeJS- get process ID from within shell script execNodeJS-从shell脚本exec中获取进程ID
【发布时间】:2015-10-12 17:57:12
【问题描述】:

我有一些使用 child_process.exec() 运行 shell 脚本的 NodeJS 代码。在这个 shell 脚本中,我运行了一个程序 someProgram。我想做的是获取someProgram 的PID 并将其传递回我的Javascript 代码,以便稍后我可以通过另一个child_process.exec() 调用终止该特定进程。这可能吗?

【问题讨论】:

  • 您的 shell 脚本是否将程序作为单独的进程打开?如果没有,你不能使用 child_process.pid 吗?
  • 我的 shell 脚本将程序作为后台进程运行。 child_process.pid 不会只给我 shell 脚本的 pid 而不是其中的程序吗?
  • 是的,你是对的,这就是我想问的。我知道在 C 中你可以使用“管道”在进程之间传递数据,也许一旦 shell 脚本产生了单独的进程,你可以使用管道将 pid 传递给 JS?我没有用 node 做到这一点,所以不确定这样做是否可行或最优雅的方式。

标签: javascript node.js shell pid


【解决方案1】:
var exec = require('child_process').exec;
var pid = {};
exec('. ./script.sh', function(err, stdout, stderr) {
  console.log(stdout);
  setTimeout(function() {
    exec('kill ' + pid, function(err, stdout, stderr) {
      console.log(stdout);
    });
  }, 6000);

});

exec('pgrep -f someProgram', function(err, stdout, stderr) {
  console.log('stdout' + stdout);
  pid = stdout;
  console.log('pid ' + pid);
});

请注意,底部的 exec 将同时运行。您可以在 gulpfile 等中使用它。

【讨论】:

  • 我认为 OP 正在询问如何获取子进程创建的进程的 pid。
  • var child = exec(...); pid=child.pid; .. 这将返回进程获得的 pid。
猜你喜欢
  • 2018-10-14
  • 1970-01-01
  • 2011-09-20
  • 2012-10-14
  • 1970-01-01
  • 2013-06-02
  • 1970-01-01
  • 2018-02-25
  • 2022-01-05
相关资源
最近更新 更多