2011-04-06 77 views
0

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

这会优于需要父级定期发送保持活动状态的信号,并且最好还是运行ps命令。

+0

你使用系统“儿童进程?” – Emmerman 2011-04-06 12:06:04

+0

@Emmerman:我不确定你的意思。父节点运行'require('child_process')。spawn(process.argv [0],['path_to_child.js'])'以启动子节点。然后,如果需要与孩子交谈,则使用孩子的标准输入和标准输出。 stderr被传送到日志。我猜测答案是肯定的? – 2011-04-06 12:11:15

回答

5

您可以使用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()通话

0

我从原生OSX应用程序作为后台工作内开始发送的Node.js PID作为参数。为了使Node.js的退出时消耗node.js的标准输出父进程死亡/退出,我做了以下内容:

// Watch parent exit when it dies 

process.stdout.resume(); 
process.stdout.on('end', function() { 
 process.exit(); 
}); 

容易这样,但我不能完全肯定,如果这是你经历了什么要求;-)