【问题标题】:Node.JS Parent Process IDNode.JS 父进程 ID
【发布时间】:2011-04-06 12:02:46
【问题描述】:

是否可以使用 Node.JS 获取父进程 ID?我想检测父母是否以无法通知孩子的方式被杀或失败。如果发生这种情况,子进程的父进程 id 应该变为 1。

这比要求父母定期发送保持活动信号更可取,也比运行ps 命令更可取。

【问题讨论】:

  • 你使用系统“子进程”吗?
  • @Emmerman:我不确定你的意思。父进程运行require('child_process').spawn(process.argv[0], ['path_to_child.js']) 以启动子进程。然后,如果它需要与孩子交谈,它会使用孩子的标准输入和标准输出。 stderr 通过管道传输到日志。我猜答案是肯定的?

标签: node.js process


【解决方案1】:

您可以使用 pid 文件。类似的东西

var util = require('util'),
    fs = require('fs'),
    pidfile = '/var/run/nodemaster.pid';

try {
    var pid = fs.readFileSync(pidfile);
    //REPLACE with your signal or use another method to check process existence :)
    process.kill(pid, 'SIGUSR2'); 
    util.puts('Master already running');
    process.exit(1);
} catch (e) {
    fs.writeFileSync(pidfile, process.pid.toString(), 'ascii');
}

//run your childs here

您也可以在 spawn() 调用中发送 pid 作为参数

【讨论】:

    【解决方案2】:

    我从本地 OSX 应用程序中作为后台工作程序启动 Node.JS。为了让 node.js 在消耗 node.js stdout 的父进程死亡/退出时退出,我执行以下操作:

    // Watch parent exit when it dies
    
    process.stdout.resume();
    process.stdout.on('end', function() {
      process.exit();
    });
    

    就这么简单,但我不确定这是否是您一直要求的 ;-)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-11
      • 2017-05-23
      • 2011-07-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多