1 | ;
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | const tslib_1 = require("tslib");
|
4 | const utils_1 = require("@neo-one/utils");
|
5 | const is_running_1 = tslib_1.__importDefault(require("is-running"));
|
6 | const errors_1 = require("./errors");
|
7 | exports.killProcess = async (pid) => {
|
8 | const startTime = utils_1.utils.nowSeconds();
|
9 | let alive = is_running_1.default(pid);
|
10 | if (!alive) {
|
11 | return;
|
12 | }
|
13 | // tslint:disable-next-line no-loop-statement
|
14 | while (utils_1.utils.nowSeconds() - startTime <= 10) {
|
15 | try {
|
16 | let signal = 'SIGINT';
|
17 | if (utils_1.utils.nowSeconds() - startTime > 7) {
|
18 | signal = 'SIGKILL';
|
19 | }
|
20 | else if (utils_1.utils.nowSeconds() - startTime > 5) {
|
21 | signal = 'SIGTERM';
|
22 | }
|
23 | process.kill(pid, signal);
|
24 | }
|
25 | catch (error) {
|
26 | if (error.code === 'ESRCH') {
|
27 | return;
|
28 | }
|
29 | throw error;
|
30 | }
|
31 | await new Promise((resolve) => setTimeout(resolve, 200));
|
32 | alive = is_running_1.default(pid);
|
33 | if (!alive) {
|
34 | return;
|
35 | }
|
36 | }
|
37 | throw new errors_1.FailedToKillProcessError(pid);
|
38 | };
|
39 |
|
40 | //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImtpbGxQcm9jZXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDBDQUF1QztBQUN2QyxvRUFBbUM7QUFDbkMscUNBQW9EO0FBRXZDLFFBQUEsV0FBVyxHQUFHLEtBQUssRUFBRSxHQUFXLEVBQWlCLEVBQUU7SUFDOUQsTUFBTSxTQUFTLEdBQUcsYUFBSyxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQ3JDLElBQUksS0FBSyxHQUFHLG9CQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDM0IsSUFBSSxDQUFDLEtBQUssRUFBRTtRQUNWLE9BQU87S0FDUjtJQUVELDZDQUE2QztJQUM3QyxPQUFPLGFBQUssQ0FBQyxVQUFVLEVBQUUsR0FBRyxTQUFTLElBQUksRUFBRSxFQUFFO1FBQzNDLElBQUk7WUFDRixJQUFJLE1BQU0sR0FBRyxRQUFRLENBQUM7WUFDdEIsSUFBSSxhQUFLLENBQUMsVUFBVSxFQUFFLEdBQUcsU0FBUyxHQUFHLENBQUMsRUFBRTtnQkFDdEMsTUFBTSxHQUFHLFNBQVMsQ0FBQzthQUNwQjtpQkFBTSxJQUFJLGFBQUssQ0FBQyxVQUFVLEVBQUUsR0FBRyxTQUFTLEdBQUcsQ0FBQyxFQUFFO2dCQUM3QyxNQUFNLEdBQUcsU0FBUyxDQUFDO2FBQ3BCO1lBQ0QsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUM7U0FDM0I7UUFBQyxPQUFPLEtBQUssRUFBRTtZQUNkLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxPQUFPLEVBQUU7Z0JBQzFCLE9BQU87YUFDUjtZQUVELE1BQU0sS0FBSyxDQUFDO1NBQ2I7UUFDRCxNQUFNLElBQUksT0FBTyxDQUFPLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDL0QsS0FBSyxHQUFHLG9CQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDdkIsSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNWLE9BQU87U0FDUjtLQUNGO0lBRUQsTUFBTSxJQUFJLGlDQUF3QixDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzFDLENBQUMsQ0FBQyIsImZpbGUiOiJuZW8tb25lLXNlcnZlci1wbHVnaW4vc3JjL2tpbGxQcm9jZXNzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdXRpbHMgfSBmcm9tICdAbmVvLW9uZS91dGlscyc7XG5pbXBvcnQgaXNSdW5uaW5nIGZyb20gJ2lzLXJ1bm5pbmcnO1xuaW1wb3J0IHsgRmFpbGVkVG9LaWxsUHJvY2Vzc0Vycm9yIH0gZnJvbSAnLi9lcnJvcnMnO1xuXG5leHBvcnQgY29uc3Qga2lsbFByb2Nlc3MgPSBhc3luYyAocGlkOiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgY29uc3Qgc3RhcnRUaW1lID0gdXRpbHMubm93U2Vjb25kcygpO1xuICBsZXQgYWxpdmUgPSBpc1J1bm5pbmcocGlkKTtcbiAgaWYgKCFhbGl2ZSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZSBuby1sb29wLXN0YXRlbWVudFxuICB3aGlsZSAodXRpbHMubm93U2Vjb25kcygpIC0gc3RhcnRUaW1lIDw9IDEwKSB7XG4gICAgdHJ5IHtcbiAgICAgIGxldCBzaWduYWwgPSAnU0lHSU5UJztcbiAgICAgIGlmICh1dGlscy5ub3dTZWNvbmRzKCkgLSBzdGFydFRpbWUgPiA3KSB7XG4gICAgICAgIHNpZ25hbCA9ICdTSUdLSUxMJztcbiAgICAgIH0gZWxzZSBpZiAodXRpbHMubm93U2Vjb25kcygpIC0gc3RhcnRUaW1lID4gNSkge1xuICAgICAgICBzaWduYWwgPSAnU0lHVEVSTSc7XG4gICAgICB9XG4gICAgICBwcm9jZXNzLmtpbGwocGlkLCBzaWduYWwpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoZXJyb3IuY29kZSA9PT0gJ0VTUkNIJykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgICBhd2FpdCBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4gc2V0VGltZW91dChyZXNvbHZlLCAyMDApKTtcbiAgICBhbGl2ZSA9IGlzUnVubmluZyhwaWQpO1xuICAgIGlmICghYWxpdmUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICB0aHJvdyBuZXcgRmFpbGVkVG9LaWxsUHJvY2Vzc0Vycm9yKHBpZCk7XG59O1xuIl19
|