1 | #!/usr/bin/env node
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 | const program = require('commander');
|
9 | const chalk = require('chalk');
|
10 | const find = require('find-process');
|
11 |
|
12 | const welcome = require('../lib/welcome');
|
13 | const { version } = require('../package.json');
|
14 |
|
15 | const terminal = chalk.cyan('athena:');
|
16 |
|
17 | function kill(pid, milliseconds) {
|
18 |
|
19 | process.kill(pid);
|
20 |
|
21 |
|
22 | return new Promise((resolve) => setTimeout(resolve, milliseconds));
|
23 | }
|
24 |
|
25 | async function pipeline(port) {
|
26 | welcome();
|
27 |
|
28 | try {
|
29 | const matches = find('port', port);
|
30 | const success = chalk.magenta(`machine ${port} free success....`);
|
31 |
|
32 | await Promise.all(matches.map((match) => kill(match.pid, 2500)));
|
33 |
|
34 |
|
35 | console.log(`${terminal} ${success}`);
|
36 |
|
37 | } catch (err) {
|
38 |
|
39 | console.log(
|
40 | `${terminal} ${chalk.red(`kill pipeline failed, ${err.message.trim()}`)}`
|
41 | );
|
42 |
|
43 | process.exit(6);
|
44 | }
|
45 | }
|
46 |
|
47 | program
|
48 | .version(version)
|
49 | .usage('<port>')
|
50 | .action(pipeline)
|
51 | .parse(process.argv);
|