我可能会因此而被投票,但我不明白我哪里出错了.
我试图在javascript中生成一个进程,并在一段时间后将其杀死(用于测试).
最后,进程将是一个无限循环,我需要在指定的时间使用不同的参数重新启动,所以我认为产生进程并终止它是最好的方法.
我的测试代码是:
var spawn=require('child_process').spawn
, child=null;
child=spawn('omxplayer', ['test.mp4'], function(){console.log('end');}, {timeout:6000});
console.log('Timeout');
setTimeout(function(){
console.log('kill');
child.kill();
}, 1200);
child.stdout.on('data', function(data){
console.log('stdout:'+data);
});
child.stderr.on('data', function(data){
console.log('stderr:'+data);
});
child.stdin.on('data', function(data){
console.log('stdin:'+data);
});
Run Code Online (Sandbox Code Playgroud)
结果是:
#~$ node test.js
Timeout
kill
Run Code Online (Sandbox Code Playgroud)
但是我仍然需要发送ctrl + C来结束程序
我错过了什么?
编辑:在Raspbian,节点0.10.17,omxplayer是二进制(视频播放器).
尝试:添加chmod + x到应用程序.以root身份发布.暂停了子进程的标准输入.在kill命令中使用所有与终止相关的信号.
EDIT2:
在应用程序运行时启动ps命令:
2145 bash
2174 node
2175 omxplayer
2176 omxplayer.bin
2177 ps
Run Code Online (Sandbox Code Playgroud)
因此omxplayer do是一个包装器,它在结束时不会结束进程,有没有办法获得包装进程的pid?
EDIT3:
仍然咬着灰尘,试过这个:
spawn('kill', ['-QUIT', '-$(ps opgid= '+child.pid+')']);
Run Code Online (Sandbox Code Playgroud)
我认为会杀死omxplayer的所有孩子,我不知道是否使用了这样的spawn是错的,或者它是否是不起作用的代码.
最后编辑:
我做的最后一次编辑是很好的答案,但不得不被欺骗了一下.
我创建了一个sh文件(执行权限),如下所示:
PID=$1
PGID=$(ps opgid= "$PID")
kill -QUIT -"$PGID"
Run Code Online (Sandbox Code Playgroud)
我从这开始:
execF('kill.sh', [child.pid], function(){ …Run Code Online (Sandbox Code Playgroud) 我试图使用node.js模块xml2js
我的代码很简单:
function testparse(pathname, callback) {
var parser = require('xml2js').Parser(),
util = require('util'),
fs = require('fs'),
fs.readFile(pathname, function (err, data) {
parser.parseString(data, function(err, result) {
console.log('Complete result:');
console.log(util.inspect(result, {depth: null})); //Work
console.log('Try to access element:');
console.log(result.smil.body); //Work
console.log(result.smil.body.update); //Undefined
});
});
}
Run Code Online (Sandbox Code Playgroud)
我的xml文件如下:
<?xml version="1.0"?>
<smil>
<head/>
<body>
<update /*some field*//>
<stream name="name"/>
<playlist /*some field*/>
<video /*some field*//>
<video /*some field*//>
<video /*some field*//>
</playlist>
</body>
</smil>
Run Code Online (Sandbox Code Playgroud)
输出给了我:
Complete result:
{ smil:
{ head: [''],
body:
[ { update: …Run Code Online (Sandbox Code Playgroud) 我一直在寻找,我没有找到任何好的答案.我有一个n-deep树,我存储在DB中,我想填充所有父母,所以最后我得到完整的树
node
-parent
-parent
.
.
-parent
Run Code Online (Sandbox Code Playgroud)
到目前为止,我填充到2级,正如我所提到的,我需要达到n级.
Node.find().populate('parent').exec(function (err, items) {
if (!err) {
Node.populate(items, {path: 'parent.parent'}, function (err, data) {
return res.send(data);
});
} else {
res.statusCode = code;
return res.send(err.message);
}
});
Run Code Online (Sandbox Code Playgroud) 我目前正在尝试用node.js的fs模块读取一些文件.因为它缺少我曾经使用的函数(fseek(),getline()...),所以我创建了另一个模块来取回它们.(C stdio.h的node.js副本).
我的简单问题是:
seek()是否存在于其他名称中,或者我是否需要重新实现几乎每个函数才能拥有它?
我有一个大的xlsx文件正在90MB使用phpexcel它给我
Warning: simplexml_load_string(): Memory allocation failed : growing buffer
Run Code Online (Sandbox Code Playgroud)
我尝试使用此处记录的每个方法加载文件,并且还更改了php.ini memory_limit = -1.
我正在尝试将xlsx文件转换为csv文件,以便可以轻松加载.
有没有办法在不使用phpexcel的情况下将xlsx文件转换为csv?
我在node.js中有一个应用程序.
本申请分为3部分:
launcher.js,启动另外两个部分,并在处理清理后在崩溃/更新时重新启动它们.
app.js,自己在电脑上工作.
server.js,用于访问日志和不同的命令.
启动器的简化代码是:
var cluster = require('cluster'),
exec = require('child_process').exec,
server;
if (cluster.isMaster) {
cluster.fork();
server = exec('server.js');
cluster.on('exit', function(worker, code, signal) {
//Clean corrupted data, log crash if neccessary, reload source code for update ...
cluster.fork();
});
server.on('exit', function () {
//Same as for app, with a different handling of signal...
server = exec('node server.js');
});
} else {
var self = require('app.js');
self.start();
}
Run Code Online (Sandbox Code Playgroud)
集群的好处在于它们与启动程序处于同一个进程中,因此我可以处理一些错误,而无需重新启动应用程序(只需在应用程序内部调用正确的函数进行"软重启"),并保持一切都在同一个过程中.
虽然有了exec,我仍然坚持重新启动服务器,有时不知道出了什么问题,这意味着有一个子shell,我不喜欢.
有没有办法分叉群集,但启动不同的代码?
我从服务器获取两个对象数组,如下所示:
var duplicateTestData = [
{
licenseId: 'xxx',
batchId: '123',
reportDate: Fri Dec 11 2015 00:00:00 GMT+0530 (India Standard Time)
},
{
licenseId: 'yyy',
batchId: '124',
reportDate: Fri Dec 11 2015 00:00:00 GMT+0530 (India Standard Time)
},
{
licenseId: 'aaa',
batchId: '145',
reportDate: Fri Dec 11 2015 00:00:00 GMT+0530 (India Standard Time)
}
];
var finalResult = [
{
reportDate: Fri Dec 11 2015 00:00:00 GMT+0530 (India Standard Time),
license: {},
testType: 'P1',
productType: 'Flower',
batchId: '123',
licenseId: 'xxx',
createType: …Run Code Online (Sandbox Code Playgroud) 我正在编写一个mongoose模式,我想了解它的属性.
这是我的架构:
var UserSchema = new Schema({
name: String,
username: { type: String, required: true, index: { unique: true }},
password: { type: String, required: true, select: false }
});
Run Code Online (Sandbox Code Playgroud)
required没有宣布"名字" - ?required宣布?select- 真/假 - 意味着什么?index- 应该宣布为什么?我正在开发一个API,它会进行大量的调用,其中一些需要因各种原因进行彻底记录.
现在,我记录了函数中发生的所有输入/输出/处理,并且API完美运行,因此似乎不需要增加日志记录量.
但是我想到的一个想法就是为每个传入的API调用分配一个UUID,这将跟随内部函数的记录.
虽然它会在每个函数中创建相当多的附加参数来跟随UUID,但我想知道它是否是常见的做法,如果我应该在需要之前实现它,并且要做的更改量是可管理的.
例如:
显然,真正的代码要复杂得多,并且不console.log用于日志记录
const express = require('express'),
fs = require('fs'),
config = require('./config.json'),
app = express();
function foo(bar, callback) {
console.log(bar);
fs.open(bar, (err, data) => {
if(err) {
console.err(err);
callback(err);
} else {
console.log(data)
callback(null, data);
}
});
}
app.get('/foo', (req, res) => {
console.log(req.body);
foo(req.body.bar, (err, result) => {
if(err) {
console.err(err);
res.send(err);
} else {
console.log(result)
res.send(null, result);
}
});
});
app.listen(config.port);
Run Code Online (Sandbox Code Playgroud)
至:
const express = require('express'),
UUID = require('uuid-generator'),
fs = require('fs'), …Run Code Online (Sandbox Code Playgroud) 我计划将BaaS用于项目,并且几乎确信使用Firebase.
我唯一想知道的是它作为数据库使用的是什么?
我知道它是一个noSQL数据库,在JSON中存储元素,关于quora的问题提到Firebase曾经使用MongoDB作为它的数据库,但现在不再存在了.
所以我的问题很简单:Firebase在底层使用什么来存储它的数据?