@neo-one/server-plugin
Version:
NEO•ONE Server plugin API.
40 lines (38 loc) • 3.91 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const tslib_1 = require("tslib");
const utils_1 = require("@neo-one/utils");
const is_running_1 = tslib_1.__importDefault(require("is-running"));
const errors_1 = require("./errors");
exports.killProcess = async (pid) => {
const startTime = utils_1.utils.nowSeconds();
let alive = is_running_1.default(pid);
if (!alive) {
return;
}
while (utils_1.utils.nowSeconds() - startTime <= 10) {
try {
let signal = 'SIGINT';
if (utils_1.utils.nowSeconds() - startTime > 7) {
signal = 'SIGKILL';
}
else if (utils_1.utils.nowSeconds() - startTime > 5) {
signal = 'SIGTERM';
}
process.kill(pid, signal);
}
catch (error) {
if (error.code === 'ESRCH') {
return;
}
throw error;
}
await new Promise((resolve) => setTimeout(resolve, 200));
alive = is_running_1.default(pid);
if (!alive) {
return;
}
}
throw new errors_1.FailedToKillProcessError(pid);
};
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImtpbGxQcm9jZXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDBDQUF1QztBQUN2QyxvRUFBbUM7QUFDbkMscUNBQW9EO0FBRXZDLFFBQUEsV0FBVyxHQUFHLEtBQUssRUFBRSxHQUFXLEVBQWlCLEVBQUU7SUFDOUQsTUFBTSxTQUFTLEdBQUcsYUFBSyxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQ3JDLElBQUksS0FBSyxHQUFHLG9CQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDM0IsSUFBSSxDQUFDLEtBQUssRUFBRTtRQUNWLE9BQU87S0FDUjtJQUdELE9BQU8sYUFBSyxDQUFDLFVBQVUsRUFBRSxHQUFHLFNBQVMsSUFBSSxFQUFFLEVBQUU7UUFDM0MsSUFBSTtZQUNGLElBQUksTUFBTSxHQUFHLFFBQVEsQ0FBQztZQUN0QixJQUFJLGFBQUssQ0FBQyxVQUFVLEVBQUUsR0FBRyxTQUFTLEdBQUcsQ0FBQyxFQUFFO2dCQUN0QyxNQUFNLEdBQUcsU0FBUyxDQUFDO2FBQ3BCO2lCQUFNLElBQUksYUFBSyxDQUFDLFVBQVUsRUFBRSxHQUFHLFNBQVMsR0FBRyxDQUFDLEVBQUU7Z0JBQzdDLE1BQU0sR0FBRyxTQUFTLENBQUM7YUFDcEI7WUFDRCxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQztTQUMzQjtRQUFDLE9BQU8sS0FBSyxFQUFFO1lBQ2QsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLE9BQU8sRUFBRTtnQkFDMUIsT0FBTzthQUNSO1lBRUQsTUFBTSxLQUFLLENBQUM7U0FDYjtRQUNELE1BQU0sSUFBSSxPQUFPLENBQU8sQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUMvRCxLQUFLLEdBQUcsb0JBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN2QixJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ1YsT0FBTztTQUNSO0tBQ0Y7SUFFRCxNQUFNLElBQUksaUNBQXdCLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDMUMsQ0FBQyxDQUFDIiwiZmlsZSI6Im5lby1vbmUtc2VydmVyLXBsdWdpbi9zcmMva2lsbFByb2Nlc3MuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB1dGlscyB9IGZyb20gJ0BuZW8tb25lL3V0aWxzJztcbmltcG9ydCBpc1J1bm5pbmcgZnJvbSAnaXMtcnVubmluZyc7XG5pbXBvcnQgeyBGYWlsZWRUb0tpbGxQcm9jZXNzRXJyb3IgfSBmcm9tICcuL2Vycm9ycyc7XG5cbmV4cG9ydCBjb25zdCBraWxsUHJvY2VzcyA9IGFzeW5jIChwaWQ6IG51bWJlcik6IFByb21pc2U8dm9pZD4gPT4ge1xuICBjb25zdCBzdGFydFRpbWUgPSB1dGlscy5ub3dTZWNvbmRzKCk7XG4gIGxldCBhbGl2ZSA9IGlzUnVubmluZyhwaWQpO1xuICBpZiAoIWFsaXZlKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lIG5vLWxvb3Atc3RhdGVtZW50XG4gIHdoaWxlICh1dGlscy5ub3dTZWNvbmRzKCkgLSBzdGFydFRpbWUgPD0gMTApIHtcbiAgICB0cnkge1xuICAgICAgbGV0IHNpZ25hbCA9ICdTSUdJTlQnO1xuICAgICAgaWYgKHV0aWxzLm5vd1NlY29uZHMoKSAtIHN0YXJ0VGltZSA+IDcpIHtcbiAgICAgICAgc2lnbmFsID0gJ1NJR0tJTEwnO1xuICAgICAgfSBlbHNlIGlmICh1dGlscy5ub3dTZWNvbmRzKCkgLSBzdGFydFRpbWUgPiA1KSB7XG4gICAgICAgIHNpZ25hbCA9ICdTSUdURVJNJztcbiAgICAgIH1cbiAgICAgIHByb2Nlc3Mua2lsbChwaWQsIHNpZ25hbCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmIChlcnJvci5jb2RlID09PSAnRVNSQ0gnKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICAgIGF3YWl0IG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIDIwMCkpO1xuICAgIGFsaXZlID0gaXNSdW5uaW5nKHBpZCk7XG4gICAgaWYgKCFhbGl2ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIHRocm93IG5ldyBGYWlsZWRUb0tpbGxQcm9jZXNzRXJyb3IocGlkKTtcbn07XG4iXX0=