+
80
-

回答

在 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 函数用于返回检测结果。注意事项:进程名称需要准确,可能需要检查进程名称的前后空格或大小写。不同平台上的命令可能会略有不同,因此在实际应用中,你可能需要根据具体情况调整命令。权限问题可能会影响命令的执行,确保脚本有足够的权限来列出进程。

这个方法提供了一个基本的跨平台解决方案来检测进程是否在运行。根据实际需求,可能需要更复杂的逻辑和错误处理。

网友回复

我知道答案,我要回答