【问题标题】:Electron kill process by process name on windows, mac(darwin) and linux在 windows、mac(darwin) 和 linux 上按进程名称杀死电子进程
【发布时间】:2021-01-12 17:54:47
【问题描述】:

如何在 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?或者有没有其他方法可以杀死进程?

【问题讨论】:

  • kill 跟随两个平台的 pid 应该可以完成这项工作
  • 你能详细说明一下吗?另外,我知道 vlc.exe 正在运行,那么我怎么知道进程的 PID?

标签: javascript node.js electron electron-forge


【解决方案1】:

PID 在ps 输出中。如果pidof 可用,您可以使用kill $(pidof vlc)。与其编写自己的代码来找出 PID 并进行杀戮,您还可以使用 a well-tested module 来达到同样的目的。

【讨论】:

  • 您提供的这个模块“fkill”运行良好。谢谢
【解决方案2】:

在 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 优雅地停止进程。

【讨论】:

    猜你喜欢
    • 2011-02-25
    • 2011-06-19
    • 1970-01-01
    • 1970-01-01
    • 2017-10-02
    • 1970-01-01
    • 2016-10-26
    • 1970-01-01
    • 2010-09-14
    相关资源
    最近更新 更多