process 对象
process对象是一个全局对象,提供当前Node.js 进程信息并对其进行控制。通常用于编写本地命令行程序。
1.进程事件
process
对象是EventEmitter
类的实例,因此可以使用事件的方式来处理和监听process
对象的各种事件。以下是一些常用的process
对象事件:
- ‘exit’:当进程即将退出时触发。可以用于执行一些清理操作。
此时无法阻止事件循环退出,并且一旦所有 exit 事件的监听器都完成运行,Node.is 进程将终止。这里给出简单的示例代码。
示例代码:
process.on('exit', (code) => {
console.log(`Process exited with code ${code}`);
});
- beforeExit 当Node.s 清空其事件循环并且没有其他工作要调度时,会触发此事件。
- 通常,Node.js进程将在没有调度工作时退出,但是在 beforeExit 事件上注册的监听器可以进行异步调用,从而导致Node.is 进程继续,beforeExit 事件会反复执行 。
因为beforeExit 事件会在 Node.js 清空事件循环时触发,但在退出之前beforeExit 事件的处理函数中包含了一个异步操作 setTimeout,这会导致事件循环中有一个未完成的异步操作。事件循环仍然会继续,直到所有异步操作完成或被取消。
beforeExit 事件的监听器回调函数会接收到 process.exitCode(退出码)作为唯一参数。可以通过设置 process.exitCode 的值来指定进程退出时的退出码。
process.on('beforeExit', (exitCode) => {
console.log('beforeExit event触发');
console.log(`Exit code: ${exitCode}`);
// 执行一些异步操作会导致Node.is 进程继续,beforeExit 事件会反复执行 。
// setTimeout(() => {
// console.log('beforeExit 异步操作');
// }, 1000);
});
// 模拟异步操作
setTimeout(() => {
console.log('异步操作');
}, 1000);
// 模拟同步操作
console.log('同步操作');
// 设置退出码
process.exitCode = 1;
在上面的示例中,我们监听了 beforeExit 事件,并在事件处理函数中打印一些信息,包括退出码。在事件循环中,先执行同步操作,然后执行异步操作。当事件循环中的所有任务执行完毕后,beforeExit 事件会被触发,我们可以在事件处理函数中执行一些异步操作。
-
‘uncaughtException’:当未捕获的异常发生时触发。可以用于捕获并处理未处理的异常。
示例代码:process.on('uncaughtException', (err) => { console.error('Uncaught Exception:', err); // 执行一些处理逻辑 process.exit(1); // 强制退出进程 });
-
‘SIGINT’:当用户按下Ctrl+C键时触发。可以用于捕获并处理用户的中断信号。
示例代码:process.on('SIGINT', () => { console.log('Received SIGINT signal'); // 执行一些处理逻辑 process.exit(0); // 正常退出进程 });
-
‘SIGTERM’:当进程收到终止信号时触发。可以用于捕获并处理终止信号。
示例代码:process.on('SIGTERM', () => { console.log('Received SIGTERM signal'); // 执行一些处理逻辑 process.exit(0); // 正常退出进程 });
这些是一些常用的process
对象事件,可以根据具体的需求来监听和处理相应的事件。