API: Процессы

Функции для поиска, мониторинга и управления процессами Windows.

Регистрация в C++: regManager(js) и regProcesses(js).


proc_find

proc_find(name: string) → object

Найти процесс(ы) по имени .exe (без учёта регистра). Если запущено несколько экземпляров — возвращает все PID.

Параметры:

Параметр Тип Описание
name string Имя файла процесса, например "notepad.exe"

Результат:

Поле Тип Описание
found bool true — найден хотя бы один экземпляр
pid number PID первого найденного (0, если не найден)
pids number[] Массив всех PID с таким именем
error string Сообщение об ошибке или ""

Пример:

let f = proc_find("notepad.exe");

if (!f.found) {
    console.log("Процесс не найден");
} else {
    console.log("Первый PID:", f.pid);

    if (f.pids.length > 1) {
        console.log("Несколько экземпляров:", JSON.stringify(f.pids));
    }
}

proc_cpu

proc_cpu(pid: number) → object

Использование ЦПУ процессом в процентах.

Примечание: Функция делает два замера с паузой 200 мс — выполнение блокируется на это время.

Параметры:

Параметр Тип Описание
pid number PID процесса

Результат:

Поле Тип Описание
cpu number Процент ЦПУ (−1 при ошибке)
error string Сообщение об ошибке или ""

Пример:

let r = proc_cpu(1234);
if (r.error) {
    console.log("Ошибка:", r.error);
} else {
    console.log("ЦПУ:", r.cpu.toFixed(1) + "%");
}

proc_ram

proc_ram(pid: number) → object

Потребление памяти (Рабочий набор).

Параметры:

Параметр Тип Описание
pid number PID процесса

Результат:

Поле Тип Описание
ram_mb number МБ (−1 при ошибке)
ram_bytes number Байты
error string Сообщение об ошибке или ""

Пример:

let r = proc_ram(1234);
console.log("ОЗУ:", r.ram_mb.toFixed(1), "МБ");
console.log("ОЗУ (байты):", r.ram_bytes);

proc_alive

proc_alive(pid: number) → object

Проверяет, жив ли процесс и отвечает ли на сообщения.

Поведение:

  • GUI-процесс (имеет видимое окно): проверяется через SendMessageTimeout с таймаутом 1 сек.
  • Фоновый процесс (без окна): responding = alive.

Параметры:

Параметр Тип Описание
pid number PID процесса

Результат:

Поле Тип Описание
alive bool true — процесс существует и не завершился
responding bool true — процесс отвечает на сообщения
error string Сообщение об ошибке или ""

Пример:

let r = proc_alive(1234);
console.log("Жив:", r.alive);
console.log("Отвечает:", r.responding);

if (r.alive && !r.responding) {
    console.log("Процесс завис!");
}

proc_service

proc_service(pid: number) → object

Принадлежит ли процесс службе Windows.

Параметры:

Параметр Тип Описание
pid number PID процесса

Результат:

Поле Тип Описание
is_service bool true — процесс является службой Windows
service_name string Имя службы или ""
error string Сообщение об ошибке или ""

Пример:

let r = proc_service(1234);
if (r.is_service) {
    console.log("Служба:", r.service_name);
}

proc_kill

proc_kill(pid: number) → object

Принудительное завершение процесса (TerminateProcess).

Параметры:

Параметр Тип Описание
pid number PID процесса

Результат:

Поле Тип Описание
ok bool true — процесс завершён
error string Сообщение об ошибке или ""

Пример:

let r = proc_kill(1234);
if (r.ok) {
    console.log("Процесс завершён");
} else {
    console.log("Ошибка:", r.error);
}

proc_run

proc_run(path: string, args?: string) → object

Запуск нового процесса (CreateProcess).

Параметры:

Параметр Тип Описание
path string Полный путь к .exe
args string (опционально) Аргументы командной строки

Результат:

Поле Тип Описание
ok bool true — процесс запущен
pid number PID нового процесса (0 при ошибке)
error string Сообщение об ошибке или ""

Примеры:

// Без аргументов
let r = proc_run("C:\\Windows\\notepad.exe");
console.log("PID:", r.pid);

// С аргументами
let r2 = proc_run("C:\\tools\\app.exe", "--config app.json --verbose");
if (r2.ok) {
    console.log("Запущен, PID:", r2.pid);
} else {
    console.log("Ошибка:", r2.error);
}

Полный пример: мониторинг одного процесса

let name = "myapp.exe";

// 1. Найти процесс
let f = proc_find(name);
if (!f.found) {
    console.log("[WARN] Процесс не найден:", name);
} else {
    let pid = f.pid;

    // 2. Собрать метрики
    let cpu  = proc_cpu(pid);      // блокирует на 200 мс
    let ram  = proc_ram(pid);
    let live = proc_alive(pid);
    let svc  = proc_service(pid);

    console.log("PID:", pid);
    console.log("ЦПУ:", cpu.cpu.toFixed(1) + "%");
    console.log("ОЗУ:", ram.ram_mb.toFixed(1) + " МБ");
    console.log("Жив:", live.alive, "| Отвечает:", live.responding);

    if (svc.is_service) {
        console.log("Служба:", svc.service_name);
    }
}