Javascript 子进程无法识别kill()函数
使用NodeJS,我在MATLAB和Python中调用外部脚本 使用终端命令运行使用这些应用程序的脚本('start')效果良好 但当我试图使用kill()关闭它们时('stop'),我得到一个错误: TypeError:exec.kill不是函数 我正在使用MAC OS,以下是我的代码:Javascript 子进程无法识别kill()函数,javascript,node.js,child-process,kill-process,Javascript,Node.js,Child Process,Kill Process,使用NodeJS,我在MATLAB和Python中调用外部脚本 使用终端命令运行使用这些应用程序的脚本('start')效果良好 但当我试图使用kill()关闭它们时('stop'),我得到一个错误: TypeError:exec.kill不是函数 我正在使用MAC OS,以下是我的代码: var app = require('express')(); var http = require('http').Server(app); var io = require('socket.io')(ht
var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);
var fs = require('fs');
var path = require('path');
const exec = require('child_process').exec;
var cmd1 =
'/Applications/MATLAB_R2016b.app/bin/matlab -nojvm < /Users/dorsimon/Desktop/liftrack/Testing_Classifier.m';
var cmd2 = 'python /Users/dorsimon/Desktop/liftrack/arduino_sampling_for_workout.py';
app.get('/', function(req, res) {
res.sendfile('index.html');
});
//Whenever someone connects this gets executed
io.on('connection', function(socket) {
console.log('A user connected');
fs.watch('/Users/dorsimon/Desktop/liftrack/result/', function(event, test) {
console.log('event is: ' + event);
fs.readFile('/Users/dorsimon/Desktop/liftrack/result/results.csv', 'utf-8', function read(
err,
data
) {
if (err) {
console.log('err');
throw err;
}
console.log(data);
socket.send(data);
});
});
fs.watch('/Users/dorsimon/Desktop/liftrack/go', function(event, test) {
console.log('event is: ' + event);
fs.readFile('/Users/dorsimon/Desktop/liftrack/go/go.csv', 'utf-8', function read(err, data) {
if (err) {
console.log('err');
throw err;
}
console.log(data);
socket.send(data);
});
});
//Whenever someone disconnects this piece of code executed
socket.on('disconnect', function() {
console.log('A user disconnected');
});
socket.on('start', function() {
exec(cmd1, function(error, stdout, stderr) {
// command output is in stdout
});
exec(cmd2, function(error, stdout, stderr) {
// command output is in stdout
});
});
socket.on('stop', function() {
exec.kill();
});
});
http.listen(3000, function() {
console.log('listening on *:3000');
});
var-app=require('express')();
var http=require('http')。服务器(应用程序);
var io=require('socket.io')(http);
var fs=需要('fs');
var path=require('path');
const exec=require('child_process')。exec;
var cmd1=
“/Applications/MATLAB_r2016 b.app/bin/MATLAB-nojvm
我怎样才能杀死我开始的那些孩子
谢谢
Dor您需要存储
exec
的返回值,并调用kill
。为了方便起见,您可以将这些值作为属性存储在socket
上:
socket.on('start', function() {
socket.child1 = exec(cmd1, function(error, stdout, stderr) {
// command output is in stdout
});
socket.child2 = exec(cmd2, function(error, stdout, stderr) {
// command output is in stdout
});
});
socket.on('stop', function() {
socket.child1.kill();
socket.child2.kill();
});
FWIW,您可能必须对fs.watch()
的返回值执行相同的操作,并在套接字关闭时调用它们,否则在服务器运行一段时间后,您可能会遇到问题(它会为每个socket.io
连接创建两个观察程序,但不会删除它们,因此它们会一直存在)