在 Node.js 中,要跨平台检测某个进程是否正在运行,可以使用一些操作系统命令并通过子进程模块执行这些命令。不同的操作系统有不同的命令来检查进程状态,因此你需要针对不同的平台编写代码。下面是一个使用 child_process 模块的示例,演示了如何在 Windows 和 Unix 系统(如 Linux 和 macOS)中检测某个进程是否在运行:
const { exec } = require('child_process');
function isProcessRunning(processName, callback) {
const platform = process.platform;
let cmd = '';
if (platform === 'win32') {
// Windows 命令
cmd = `tasklist`;
} else if (platform === 'darwin' || platform === 'linux') {
// macOS 和 Linux 命令
cmd = `ps -A`;
} else {
callback(new Error(`Unsupported platform: ${platform}`));
return;
}
exec(cmd, (err, stdout, stderr) => {
if (err) {
callback(err);
return;
}
const processList = stdout.toLowerCase();
const isRunning = processList.includes(processName.toLowerCase());
callback(null, isRunning);
});
}
// 使用示例
const processName = 'node'; // 要检测的进程名
isProcessRunning(processName, (err, isRunning) => {
if (err) {
console.error('Error:', err);
return;
}
if (isRunning) {
console.log(`${processName} is running.`);
} else {
console.log(`${processName} is not running.`);
}
}); 说明:Windows 使用 tasklist 命令来列出所有运行的进程,然后检查输出中是否包含指定的进程名称。macOS 和 Linux 使用 ps -A 命令来列出所有运行的进程,并检查输出中是否包含指定的进程名称。由于 stdout 返回的是一个字符串,我们将其转换为小写来进行不区分大小写的检查。callback 函数用于返回检测结果。注意事项:进程名称需要准确,可能需要检查进程名称的前后空格或大小写。不同平台上的命令可能会略有不同,因此在实际应用中,你可能需要根据具体情况调整命令。权限问题可能会影响命令的执行,确保脚本有足够的权限来列出进程。这个方法提供了一个基本的跨平台解决方案来检测进程是否在运行。根据实际需求,可能需要更复杂的逻辑和错误处理。
网友回复


