电子在 windows、mac(darwin) 和 linux 上按进程名称杀死进程

问题描述

如何在 Windows、Darwin 和 Linux 中按进程名称杀死进程? 比如,假设我需要杀死的进程是“vlc.exe”(基本上关闭应用程序)。

这里是我写的函数,用来检查这个进程是否正在运行。

const isRunning = (query,cb) => {
    let platform = process.platform;
    let cmd = '';
    switch (platform) {
        case 'win32': cmd = `tasklist`; break;
        case 'darwin': cmd = `ps -ax | grep ${query}`; break;
        case 'linux': cmd = `ps -A`; break;
        default: break;
    }
    exec(cmd,(err,stdout,stderr) => {
        stdout = stdout.toLowerCase().replace(/\s/g,'');

        cb({status: stdout.indexOf(query.toLowerCase()) > -1});
    });
}

我称这个函数

isRunning('vlc.exe',(vlc) => {
    console.log({ vlc }); // true|false
});

所以,我知道 VLC 是否正在运行。现在我想关闭它,如果它正在运行。 对于 Windows,它的 taskkill 但对于 darwin 和 Linux?或者有没有其他方法可以杀死进程?

解决方法

PID 在 ps 输出中。如果 pidof 可用,您可以执行 kill $(pidof vlc)。您也可以将 a well-tested module 用于相同的目的,而不是编写自己的代码来找出 PID 并进行杀戮。

,

在 macOS 上,很可能也在 linux 上。进程名称是 VLC。系统区分大小写,因此查找 vlc.exevlc 将找不到任何正在运行的进程。

你可以通过做类似的事情来玩

kill $(ps aux | grep -i 'vlc' | awk '{print $2}')

哪个会

  • ps aux - 查找所有进程
  • grep -i 'vlc' 通过捕获名称为 VLCvlc 的进程来过滤掉 ps(想想强制不区分大小写的 -i 参数)。
  • awk '{print $2}' 仅捕获 PID 编号。
  • kill 要求系统根据给定的 PID 正常停止进程。