forked from yitter/IdGenerator
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathprocess_test.js
More file actions
54 lines (50 loc) · 1.45 KB
/
process_test.js
File metadata and controls
54 lines (50 loc) · 1.45 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
/**
* @description:
* @author: bubao
* @date: 2021-04-27 23:38:30
* @last author: bubao
* @last edit time: 2021-04-28 10:35:20
*/
const Redis = require("ioredis");
const { spawn } = require("child_process");
const config = require("../env.config.js");
const redis = new Redis(config);
//保存被子进程实例数组
var workers = {};
//这里的被子进程理论上可以无限多
// var appsPath = [__dirname+'/service/clickService.js',__dirname+'/service/showService.js'];
var createWorker = function (appPath, i) {
//保存spawn返回的进程实例
var worker = spawn('node', [appPath, i]);
//监听子进程exit事件
worker.on('exit', async function () {
console.info('worker:' + worker.pid + 'exited');
delete workers[worker.pid];
// createWorker(appPath);
if (Object.keys(workers).length === 0) {
console.log(await redis.scard('setTest'));
await redis.del("setTest");
redis.end();
}
});
workers[worker.pid] = worker;
console.info('create worker:' + worker.pid);
};
redis.del("setTest").then(() => {
//启动所有子进程
for (var i = 10; i > 0; i--) {
createWorker(__dirname + '/test.js', i);
}
});
//父进程退出时杀死所有子进程
process.on('exit', async function () {
console.info('parent exit.');
for (var pid in workers) {
workers[pid].kill('SIGHUP');
}
if (Object.keys(workers).length===0&&redis.status!=="end") {
console.log(await redis.scard('setTest'));
await redis.del("setTest");
redis.end();
}
});