【发布时间】:2015-04-18 19:33:16
【问题描述】:
我开始学习和使用 node,我喜欢它,但我不确定某些功能是如何工作的。也许你可以帮我解决一个这样的问题:
我想根据 rest 命令从我的节点服务器生成本地脚本和程序。查看 fs 库,我看到了下面的示例,该示例说明了如何生成子进程并在其上添加一些管道/事件处理程序。
var spawn = require('child_process').spawn,
ps = spawn('ps', ['ax']),
grep = spawn('grep', ['ssh']);
ps.stdout.on('data', function (data) {
grep.stdin.write(data);
});
ps.stderr.on('data', function (data) {
console.log('ps stderr: ' + data);
});
ps.on('close', function (code) {
if (code !== 0) {
console.log('ps process exited with code ' + code);
}
grep.stdin.end();
});
grep.stdout.on('data', function (data) {
console.log('' + data);
});
grep.stderr.on('data', function (data) {
console.log('grep stderr: ' + data);
});
grep.on('close', function (code) {
if (code !== 0) {
console.log('grep process exited with code ' + code);
}
});
让我感到奇怪的是,我不明白如何保证在程序开始运行之前注册事件处理程序代码。这不像您运行一个“恢复”功能来启动孩子。这不是比赛条件吗?当然,条件会非常小,几乎不会受到影响,因为它会在之后剪掉这么短的代码,但如果是这样的话,我宁愿不要因为良好的习惯而以这种方式编码。
所以: 1)如果不是比赛条件,为什么? 2)如果这是一个竞争条件,我怎么能以正确的方式编写它?
感谢您的宝贵时间!
【问题讨论】:
标签: node.js race-condition fs