Процесс уничтожения Electron по имени процесса в 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? Или есть другой способ убить процессы?


person Shubham    schedule 12.01.2021    source источник
comment
kill после pid для обеих платформ должно выполнять эту работу   -  person Yanis-git    schedule 12.01.2021
comment
Можете ли вы уточнить немного больше? Кроме того, я знаю, что vlc.exe запущен, как я узнаю PID процесса?   -  person Shubham    schedule 12.01.2021


Ответы (2)


PID находится на выходе ps. Если доступно pidof, вы можете сделать kill $(pidof vlc). Вместо того, чтобы писать свой собственный код для определения PID и уничтожения, вы также можете использовать хорошо протестированный модуль с той же целью.

person Zac Anger    schedule 12.01.2021
comment
Этот модуль «fkill», который вы предоставили, работает хорошо. Спасибо - person Shubham; 13.01.2021

На macOS и, скорее всего, на linux. имя процесса VLC. Система чувствительна к регистру, поэтому поиск vlc.exe или vlc не найдет ни одного запущенного процесса.

вы можете поиграть, сделав что-то вроде

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

который будет

  • ps aux - искать весь процесс
  • grep -i 'vlc' отфильтровывает ps, захватывая процесс с именем VLC или vlc (подумайте о параметре -i, который делает нечувствительным к регистру).
  • awk '{print $2}' фиксирует только номер PID.
  • kill попросите систему изящно остановить процесс по заданному PID.
person Yanis-git    schedule 13.01.2021