ctrl+c를 눌러 프로세스를 종료할 때 안전하게 종료하기

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();
    })
});
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

이렇게 하면, ctrl+c로 프로세스를 종료하면 gracfulCleanJob이 모두 완료된 후 process.exit()이 실행된다.