私は同じことをしており、lein run
異なるマイクロサービスで の複数のインスタンスを起動しています。それらを殺すために、私は使ってきましたnpm install tree-kill
基本的な例
var kill = require('tree-kill');
var spawn = require('child_process').spawn;
var proc = spawn("lein", ["run"], {cwd: './some-dir', detached: true});
setTimeout(function(){kill(proc.pid); console.log('Take that!');}, 5000);
より現実的な例
var kill = require('tree-kill');
var chalk = require('chalk');
exports.killIfAlive= function(pid) {
try {
kill(pid);
}
catch(ex) {
console.error(ex);
}
};
exports.kill = function(projects) {
var pids = exports.readPIDFile();
projects.forEach(function(project) {
if (pids[project]) {
console.log('Killing', chalk.cyan(project), chalk.magenta('(pid:', pids[project], ')'));
exports.killIfAlive(pids[project]);
}
else {
console.log(chalk.cyan(project), chalk.grey('is not running.'));
}
delete pids[project];
});
return exports.writePIDFile(pids);
};
各プロジェクトを開始した後、その pid を次のような単純なオブジェクトに保存し、{project1: 12352, project2: 50943}
それをファイル システムに書き込みます。オプションを使用して実行spawn('lein' ... etc)
しているdetached
ため、現在のノード プロセスは、leiningen プロセスを削除せずに終了する可能性があります。ノード プロセスを復活させるたびに、pid ファイルを使用して 1 つ以上のプロジェクトを検索および終了できます。このアプローチを採用すると、指定された pid を持つ lein プロセスが既に終了し、その pid の下で新しいプロセスが開始されるなどの競合状態が発生する可能性があります。これは他の誰かが処理するために残します。