template-project/node_modules/batch-cluster/dist/Pids.js
2025-05-30 18:13:30 +08:00

86 lines
3.1 KiB
JavaScript

"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.pids = exports.kill = exports.pidExists = void 0;
const node_child_process_1 = __importDefault(require("node:child_process"));
const node_process_1 = __importDefault(require("node:process"));
const Object_1 = require("./Object");
const Platform_1 = require("./Platform");
/**
* @param {number} pid process id. Required.
* @returns boolean true if the given process id is in the local process
* table. The PID may be paused or a zombie, though.
*/
function pidExists(pid) {
if (pid == null || !isFinite(pid) || pid <= 0)
return false;
try {
// signal 0 can be used to test for the existence of a process
// see https://nodejs.org/dist/latest-v18.x/docs/api/process.html#processkillpid-signal
return node_process_1.default.kill(pid, 0);
}
catch (err) {
// We're expecting err.code to be either "EPERM" (if we don't have
// permission to send `pid` and message), or "ESRCH" if that pid doesn't
// exist. EPERM means it _does_ exist!
if ((err === null || err === void 0 ? void 0 : err.code) === "EPERM")
return true;
// failed to get priority--assume the pid is gone.
return false;
}
}
exports.pidExists = pidExists;
/**
* Send a signal to the given process id.
*
* @export
* @param pid the process id. Required.
* @param force if true, and the current user has
* permissions to send the signal, the pid will be forced to shut down. Defaults to false.
*/
function kill(pid, force = false) {
if (pid == null || !isFinite(pid) || pid <= 0)
return false;
try {
return node_process_1.default.kill(pid, force ? "SIGKILL" : undefined);
}
catch (err) {
if (!String(err).includes("ESRCH"))
throw err;
return false;
// failed to get priority--assume the pid is gone.
}
}
exports.kill = kill;
const winRe = /^".+?","(\d+)"/;
const posixRe = /^\s*(\d+)/;
/**
* Only used by tests
*
* @returns {Promise<number[]>} all the Process IDs in the process table.
*/
function pids() {
return new Promise((resolve, reject) => {
node_child_process_1.default.execFile(Platform_1.isWin ? "tasklist" : "ps",
// NoHeader, FOrmat CSV
Platform_1.isWin ? ["/NH", "/FO", "CSV"] : ["-e"], (error, stdout, stderr) => {
if (error != null) {
reject(error);
}
else if (("" + stderr).trim().length > 0) {
reject(new Error(stderr));
}
else
resolve(("" + stdout)
.trim()
.split(/[\n\r]+/)
.map((ea) => ea.match(Platform_1.isWin ? winRe : posixRe))
.map((m) => (0, Object_1.map)(m === null || m === void 0 ? void 0 : m[0], parseInt))
.filter((ea) => ea != null));
});
});
}
exports.pids = pids;
//# sourceMappingURL=Pids.js.map