Команда дочернего процесса NodeJS для проверки запущенных процессов

#javascript #node.js #macos #command-line-arguments #child-process

#javascript #node.js #macos #аргументы командной строки #дочерний процесс

Вопрос:

Возникли некоторые трудности с запуском моей команды по желанию. Я не могу сказать, нужно ли мне изменение в коде или в команде.

Цель: ProgramA проверяет, запущена ли ProgramB. Grep возвращает соответствующие процессы. Флаг возвращает значение true. A подключается к B. Если не выполняется, флаг возвращает False.

Я думаю, что проблема заключается в моей дочерней команде процесса для запроса активных процессов. Он проверяет количество процессов и возвращает количество. Если программа запущена, command возвращает число (например, 4), а TrueFalse возвращает true . Если программа не запущена, команда возвращает 0. Флаг TrueFalse возвращает false .

После дальнейшего изучения: похоже, может быть, моя логика в TrueFalse плоха? Я пытаюсь взять стандартный вывод и ввести его в строку, а затем проверить, не больше ли это числа. Который, кажется, всегда возвращает false . Но я не могу понять, почему. Это сводит меня с ума. Я уверен, что это тоже что-то простое.

Код:

 // Variable for application process we are checking.
let query = 'ProgramB';

const programCheck = (query, trueFalse) => {
        // Using nodeJS to find the OS
        let platform = process.platform;
        // Variable to hold command to send to terminal
        let cmd = ''; 

        // Switch for the platform to distinguish which OS the user has - So we can use the
        // correct command for querying the active processes. 
        switch(platform) {
            // Windows 
            case 'win32' : cmd = `tasklist /FI "IMAGENAME eq ${query}.exe"`;
            break;
            // Mac
            case 'darwin' : cmd = `ps -ax | grep -v grep | grep ${query}`;
            break;
            // Linux
            case 'linux' : cmd = `ps -ef | grep '${query}'`; 
            break; 
            // Default - Other
            default : console.log(`Unknown Operating System, unable to check ${query}`);
            break;
        }

        // Calling child process
        exec(cmd, (err, stdout, stderr) => {
            trueFalse(stdout.toLowerCase().indexOf(query.toLowerCase()) > -1);
            if (err) throw err;
        });
    }
  

Комментарии:

1. Что происходит? Это trueFalse функция? Почему вы передаете его в programCheck ? programCheck Предполагается вернуть true или false ? Как вы звоните programCheck ?

2. Проверка программы вызывается при нажатии кнопки HTML. (Извините, я должен был это прояснить). Идея TrueFalse заключается в том, что при вызове дочернего процесса в exec (..) будет bool . Мне просто нужен флаг для системы, чтобы разрешить «Да, программа запущена, отправить команду подключения или нет, программа не запущена, отправить команду запуска»

3. Текущий код, который у меня есть, идеально подходит для Windows, но команда Mac вызывает у меня проблему.

4. ради аргумента. можете ли вы отредактировать свой пост и добавить функцию для trueFalse()

5. кроме того, существует очень популярный модуль, который может здесь помочь. npmjs.com/package/ps-node