process
process 모듈은 JSH 애플리케이션에서 사용하도록 설계되었습니다.
addShutdownHook()
현재 프로세스가 종료될 때 호출할 콜백 함수를 추가합니다.
현재 구현에서 이 hook은 JSH 런타임이 관리하는 종료 경로에 들어왔을 때 호출됩니다.
예를 들어 스크립트가 정상적으로 끝나거나 process.exit()를 호출한 경우에는 실행됩니다.
다음과 같은 경우에는 호출이 보장되지 않습니다.
SIGKILL,kill -9와 같은 강제 종료- OS 또는 Go 런타임 수준의 치명적인 비정상 종료
process.on(signal, handler)로 가로채지 않은 signal의 기본 동작에 의한 종료
catch 가능한 signal에 대해 정리가 필요하면 process.on(signal, handler)에서 정리 코드를 수행한 뒤 종료 흐름으로 들어가도록 작성하는 것이 좋습니다.
여러 개의 shutdown hook이 등록된 경우에는 역순으로 실행됩니다. 현재 구현에서는 어떤 hook 하나가 panic 또는 예외를 발생시키더라도, 나머지 hook은 계속 실행됩니다.
사용 형식
addShutdownHook(()=>{})사용 예시
| |
주의 사항
addShutdownHook()는 모든 종료 상황에서 반드시 호출되는 것은 아닙니다. 강제 종료까지 포함한 절대적인 보장이 필요하다면 파일 flush, 외부 트랜잭션 정리, lock 해제 같은 작업은 hook에만 의존하지 말고 가능한 시점마다 명시적으로 수행해야 합니다.
arch
호스트 머신의 운영체제 아키텍처를 식별하는 문자열입니다.
일반적인 값은 amd64, aarch64입니다.
사용 예시
| |
argv
현재 프로세스에 전달된 명령행 인자 배열입니다.
argv[0]: JSH 실행 파일의 절대 경로argv[1]: 실행 중인 스크립트 이름(또는 경로)argv[2:]: 스크립트에 전달된 나머지 인자
사용 예시
| |
chdir()
현재 작업 디렉터리를 변경합니다.
path가 빈 문자열이면 JSH는 이를 $HOME으로 해석합니다.
사용 형식
chdir(path)사용 예시
| |
cpuUsage()
CPU 사용량 정보를 반환합니다.
현재 구현은 두 필드 모두 숫자 0을 반환하는 플레이스홀더입니다.
반환 필드
usersystem
사용 예시
| |
cwd()
현재 작업 디렉터리 경로를 반환합니다.
사용 예시
| |
exit()
현재 프로세스를 종료합니다. code를 생략하면 기본값은 0입니다.
사용 형식
exit([code])사용 예시
| |
which()
PATH에서 JavaScript 명령을 찾아 해석된 파일 경로를 반환합니다.
명령에 .js 확장자가 없으면 자동으로 추가됩니다.
사용 형식
which(command)사용 예시
| |
expand()
문자열에서 $HOME, ${HOME} 같은 환경 변수를 확장합니다.
사용 형식
expand(value)사용 예시
| |
env
JSH 런타임 환경 객체입니다.
사용 예시
| |
exec()
JavaScript 명령 파일을 실행하고 종료 코드를 반환합니다.
사용 형식
exec(command, ...args)사용 예시
| |
execPath
호스트 운영체제에서 현재 프로세스 실행 파일의 절대 경로입니다.
사용 예시
| |
execString()
문자열로 전달한 JavaScript 소스 코드를 실행하고 종료 코드를 반환합니다.
사용 형식
execString(source, ...args)사용 예시
hrtime()
고해상도 시간 튜플 [seconds, nanoseconds]을 반환합니다.
이전 튜플을 전달하면 해당 시점부터의 경과 시간을 반환합니다.
사용 형식
hrtime([previous])사용 예시
| |
kill()
지정한 프로세스 ID로 실제 OS 시그널을 전송합니다.
pid는 양의 정수여야 합니다.signal을 생략하면 기본값은SIGTERM입니다.- 성공하면
true를 반환합니다. - 실패하면
Error객체를 반환합니다. signal에는 문자열 이름 또는 숫자 시그널 번호를 사용할 수 있습니다.
문자열 이름은 대소문자를 구분하지 않으며 SIG 접두어를 생략할 수 있습니다.
이 별칭 지원은 process.kill()에 적용됩니다.
예:
SIGTERMtermsigint
숫자 시그널은 현재 다음 값을 지원합니다.
| 숫자 | 리터럴 |
|---|---|
0 | 없음 |
1 | SIGHUP |
2 | SIGINT |
3 | SIGQUIT |
6 | SIGABRT |
9 | SIGKILL |
10 | SIGUSR1 |
11 | SIGSEGV |
12 | SIGUSR2 |
13 | SIGPIPE |
14 | SIGALRM |
15 | SIGTERM |
signal 값 0은 실제 시그널을 보내지 않고, 대상 프로세스 존재 여부와 권한을 검사할 때 사용할 수 있습니다.
Windows에서 process.kill(pid, 'SIGINT')는 Unix의 kill(2)처럼 실제 시그널을 직접 보내는 동작이 아닙니다.
대신 대상 프로세스 그룹이 SIGINT에 가까운 인터럽트로 관찰할 수 있도록 interrupt 성격의 console control event 전달을 시도합니다.
이 동작은 Windows에서 Node.js interrupt semantic에 가장 가깝게 맞춘 것이지만 best-effort입니다.
즉, 대상이 콘솔에 연결된 프로세스 그룹이어야 하며 Windows가 control event를 라우팅할 수 없는 경우 실패할 수 있습니다.
Windows에서 SIGTERM, SIGQUIT, SIGKILL은 Unix처럼 서로 다른 실제 시그널이라기보다 종료 요청으로 처리됩니다.
사용 형식
kill(pid[, signal])사용 예시
| |
Windows interrupt 예시
const process = require('process');
console.println(process.kill(12345, 'SIGINT'));Windows가 control event를 라우팅할 수 없으면 process.kill()은 Error 객체를 반환합니다.
프로세스 존재 여부 확인 예시
| |
memoryUsage()
메모리 사용량 정보를 객체로 반환합니다.
현재 구현은 모든 필드를 숫자 0으로 반환하는 플레이스홀더입니다.
반환 필드
rssheapTotalheapUsedexternalarrayBuffers
사용 예시
| |
nextTick()
다음 이벤트 루프 턴에서 실행할 콜백을 예약합니다.
첫 번째 인자가 함수가 아니면 아무 동작도 하지 않고 undefined를 반환합니다.
사용 형식
nextTick(callback, ...args)사용 예시
| |
now()
현재 시각을 JavaScript 날짜-시간 객체로 반환합니다.
사용 예시
| |
pid
현재 프로세스의 ID입니다. 값의 타입은 숫자(Number)이며, 현재 프로세스 ID를 나타냅니다.
사용 예시
| |
platform
호스트 머신의 운영체제 플랫폼을 식별하는 문자열입니다.
일반적인 값은 windows, linux, darwin(macOS)입니다.
사용 예시
| |
ppid
부모 프로세스의 ID입니다. 값의 타입은 숫자(Number)이며, 부모 프로세스 ID를 나타냅니다.
사용 예시
| |
Signal Events
process는 EventEmitter처럼 시그널 이벤트를 받을 수 있습니다.
현재 문서 시점 기준으로 다음 시그널 이름을 지원합니다.
SIGHUPSIGINTSIGQUITSIGABRTSIGKILLSIGUSR1SIGSEGVSIGUSR2SIGPIPESIGALRMSIGTERM
시그널 이벤트 리스너는 대소문자를 구분하지 않습니다.
이벤트 이름은 SIG 접두어를 포함한 형태만 지원합니다.
예를 들어 아래 이름들은 동일하게 동작합니다.
SIGTERMsigterm
term 같은 bare alias는 시그널 이벤트 이름으로 취급하지 않습니다.
이 값은 일반 EventEmitter 이벤트 이름으로 유지됩니다.
리스너를 등록하면 JSH가 해당 OS 시그널을 이벤트로 전달합니다. 리스너가 없으면 운영체제의 기본 시그널 동작을 따릅니다.
사용 예시
| |
지원하는 리스너 등록 예
process.on('sigterm', handler);
process.once('SIGTERM', handler);
process.addListener('sigquit', handler);stdin, stdout, stderr
stdin, stdout, stderr 스트림입니다.
사용 예시
| |
title
현재 프로그램을 식별하는 문자열입니다.
사용 예시
| |
uptime()
프로세스 업타임(초)을 숫자로 반환합니다.
사용 예시
| |
version
JSH 런타임 버전을 식별하는 문자열입니다.
사용 예시
| |
versions
런타임의 상세 버전 정보를 제공하는 객체입니다.
versions.jsh: JSH 런타임 버전 문자열versions.go: Go 런타임 버전 문자열
사용 예시
| |
which()
PATH에서 JavaScript 명령을 찾아 해석된 파일 경로를 반환합니다.
명령에 .js 확장자가 없으면 자동으로 추가됩니다.
사용 형식
which(command)사용 예시
| |
dispatchEvent()
JSH 이벤트 루프에서 이벤트 이미터 객체로 이벤트를 디스패치합니다.
이 함수는 이벤트 스케줄링에 성공하면 true를, 이벤트 루프가 이미 종료되었으면 false를 반환합니다.
사용 형식
dispatchEvent(target, eventName, ...args)사용 예시
| |
dumpStack()
디버깅을 위해 지정한 깊이만큼 현재 JavaScript 호출 스택을 출력합니다.
사용 형식
dumpStack(depth)사용 예시
| |
expand()
문자열에서 $HOME, ${HOME} 같은 환경 변수를 확장합니다.
사용 형식
expand(value)사용 예시
| |