AHRIBORI.COMv0.9
HomeAbout (2)Javascript (7)CSS (12)React (3)Webpack (1)Java (0)Node.js (4)ElasticSearch (1)자료구조 (8)알고리즘 (6)Selenium (1)Linux (2)Docker (1)Git (1)Tip (4)Issue (1)Memo (3)

Node.js 프로세스 안전하게 종료하기

아리보리 | 2018.02.06 08:44 | 조회 4062 | 추천 0 | 댓글 0

 

node에서 child process를 만드는 앱을 작성했을 때 이 앱을 ctrl+c키를 눌러 종료하면 child process가 죽지 않는 경우가 있다. close를 해줘야되는데 앱이 shutdown 되는 바람에 close 되지 않은 상태로 영영 남아있는다던지..

이럴 땐 인터럽트 이벤트를 받아, 콜백에서 graceful 하게 프로세스를 종료할 수 있는 작업들을 한 뒤 종료하면 된다.

setInterval(() => {
    // app is running
}, 1000);

const gracfulCleanJob = () => new Promise((resolve, reject) => {
    setTimeout(() => {
        // cleaning job done
        resolve();
    }, 3000);
});

process.on('SIGINT', function() {
    console.log("Caught interrupt signal");
    gracfulCleanJob().then(() => {
        process.exit();
    })
});

이렇게 하면, ctrl+c로 프로세스를 종료하면 gracfulCleanJob이 모두 완료된 후 프로세스가 종료된다.