Я пытался программно управлять несколькими выделенными серверами Counter Strike: Global Offensive. Все работает нормально, но у меня проблемы с полным отключением. Когда вы включаете сервер, он создает два процесса: srcds_run
и srcds_linux
. Я могу легко выполнить child_process.kill(), и это отключит процесс srcds_run
, но процесс srcds_linux
продолжает работать, даже когда сервер выключен. Если я попытаюсь убить все процессы srcds_linux
, это уничтожит все серверы CSGO, даже если я попытаюсь отключить только один. Есть ли способ выбрать соответствующие процессы srcds_run
и srcds_linux
?
Пока это мой код:
// Turns on the server if not already on
Server.prototype.start = function(callback) {
if(!this.online) {
// Turn server on
console.log('Starting server');
this.process = spawn(this.directory + '/srcds_run', ['-game csgo', '-console', '-usercon', '+game_type 0', '+game_mode 0', '+mapgroup mg_active', '+map de_dust2', '+sv_setsteamaccount ' + this.token], { cwd: this.directory});
this.process.stderr.on('data', function(err) {
console.log('Error: ' + err);
});
this.process.stdin.on('data', function(chunk) {
console.log('stdin: ' + chunk);
});
this.process.stdout.on('data', function(chunk) {
console.log('stdout: ' + chunk);
});
}
this.online = true;
callback();
}
// Turns off the server if not already off
Server.prototype.stop = function(callback) {
if(this.online) {
// Turn server off
console.log('Stopping server');
this.process.kill();
}
this.online = false;
callback();
}
Я использую сервер Ubuntu и использую модуль child_process.spawn на node.js.
Я ценю помощь :)
srcds_run
порождаетsrcds_linux
? Есть вероятность, что это родительский процессsrcds_linux
, и вы можете получить его идентификатор процесса с помощьюpgrep
или чего-то подобного? Вы должны иметь возможность получить идентификатор исходного порожденного процесса в узле с помощью child_process.pid() - person dvlsg   schedule 24.12.2015