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);
}
}