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

프로세스의 CPU 사용률(백분율).

참고: 이 함수는 200ms 간격으로 두 번 측정합니다 — 이 시간 동안 실행이 차단됩니다.

매개변수:

매개변수 타입 설명
pid number 프로세스 PID

결과:

필드 타입 설명
cpu number CPU 백분율 (오류 시 −1)
error string 오류 메시지 또는 ""

예시:

let r = proc_cpu(1234);
if (r.error) {
    console.log("오류:", r.error);
} else {
    console.log("CPU:", r.cpu.toFixed(1) + "%");
}

proc_ram

proc_ram(pid: number) → object

메모리 사용량 (작업 세트).

매개변수:

매개변수 타입 설명
pid number 프로세스 PID

결과:

필드 타입 설명
ram_mb number MB (오류 시 −1)
ram_bytes number 바이트
error string 오류 메시지 또는 ""

예시:

let r = proc_ram(1234);
console.log("RAM:", r.ram_mb.toFixed(1), "MB");
console.log("RAM (바이트):", r.ram_bytes);

proc_alive

proc_alive(pid: number) → object

프로세스가 살아 있고 메시지에 응답하는지 여부.

동작:

  • GUI 프로세스 (보이는 창이 있음): 1초 타임아웃으로 SendMessageTimeout을 통해 확인.
  • 백그라운드 프로세스 (창 없음): 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("[경고] 프로세스를 찾을 수 없습니다:", name);
} else {
    let pid = f.pid;

    // 2. 메트릭 수집
    let cpu  = proc_cpu(pid);      // 200ms 동안 차단됨
    let ram  = proc_ram(pid);
    let live = proc_alive(pid);
    let svc  = proc_service(pid);

    console.log("PID:", pid);
    console.log("CPU:", cpu.cpu.toFixed(1) + "%");
    console.log("RAM:", ram.ram_mb.toFixed(1) + " MB");
    console.log("살아있음:", live.alive, "| 응답함:", live.responding);

    if (svc.is_service) {
        console.log("서비스:", svc.service_name);
    }
}