[英]NodeJS Fork can't get childprocess to kill
我在這里碰壁,也許這只是一個小問題,由於我對NodeJS的缺乏經驗,我看不到解決方案。
現在,我正在構建一個將由主應用程序控制的BT設備,並且已經准備好使用Bleno模塊使用NodeJS在Raspberry PI 3上進行原型設計。
到目前為止,一切正常,找到了設備,我可以通過藍牙進行設置和獲取值。 但是為了從藍牙邏輯中分離出設備可以執行的不同“程序”(由於循環等),我選擇將它們提取到外部NodeJS文件中。
這里的想法是使用NodeJS fork模塊並通過主進程控制這些進程的啟動和停止。
但是這里我的問題開始了。 我可以派生不同的JavaScript文件而不會出現問題,這些文件將被執行,但是我無法停止它們,而且我不知道如何解決它。
這是代碼(簡體):
var util = require('util');
var events = require('events');
var cp = require('child_process');
...
var ProgramTypeOne = {
NONE: 0,
ProgramOne: 1,
...
};
...
var currentProgram=null;
...
function BLEDevice() {
events.EventEmitter.call(this);
...
this.currentProgram=null;
...
}
util.inherits(BLELamp, events.EventEmitter);
BLELamp.prototype.setProgram = function(programType, programNumber) {
var self = this;
var result=0;
if(programType=="ProgramTypeOne "){
if(programNumber==1){
killProgram();
this.currentProgram=cp.fork('./programs/programOne');
result=1;
}else if(programNumber==2){
...
}
self.emit('ready', result);
};
...
module.exports.currentProgram = currentProgram;
...
function killProgram(){
if(this.currentProgram!=null){
this.currentProgram.kill('SIGTERM');
}
}
變量currentProgram似乎存在問題,看來它從未從fork調用中獲取子進程。 由於除了網站上的一些小腳本之外,我從未使用過JavaScript進行擴展,所以我不知道我的錯誤到底在哪里。 我認為這與類變量的處理有關。
對我來說,出發點是比薩 Bleno的例子。
希望該信息足夠,希望有人可以幫助我。
提前致謝!
由於killProgram()
是BLELamp
范圍之外的獨立函數,因此您需要通過綁定BLELamp
this
來調用具有正確范圍的BLELamp
。 使用apply( https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/apply )應該可以解決該問題。 我期望以下內容可以解決此問題(唯一的更改是調用killProgram
):
BLELamp.prototype.setProgram = function(programType, programNumber) {
var self = this;
var result=0;
if(programType=="ProgramTypeOne "){
if(programNumber==1){
killProgram.apply(this);
this.currentProgram=cp.fork('./programs/programOne');
result=1;
}else if(programNumber==2){
...
}
self.emit('ready', result);
};
附帶說明一下,您的代碼有點令人困惑,因為您有一個獨立的var currentProgram
然后是幾個具有各自綁定this.currentProgram
的原型。 我將更改名稱以避免混淆。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.