前言
在NodeJs中,有许多用来控制进程的退出、中止等命令,今天我们就来一起学习下:
1. process.exit([code])
作用:立即终止当前的 Node.js 进行,code为退出码,默认为 0 表示正常退出,非 0 值表示异常退出。
示例:
process.exit(0); // 正常退出
process.exit(1); // 异常退出
2. process.exitCode
作用:设置退出时的状态码,process.exitCode 是一个属性,而不是方法,
示例:
process.exitCode = 1; // 设置退出码为 1
process.exit(); // 使用 exitCode 退出,退出码为 1
3. process.abort()
作用:强制中止当前进程,该方法会直接触发进程崩溃,返回 134 退出码,并且不会执行任何 exit 事件监听器或其他清理操作。
示例:
process.abort(); // 强制中止进程
4. process.kill(pid, [signal])
作用:向指定的进程发送信号,pid 用来指定进程 ID,signal 可指定发送的信号(如 SIGTERM、SIGKILL 等)。默认情况下,发送的是 SIGTERM 信号。
示例:
// 发送 SIGTERM 信号终止进程
process.kill(1234); // 向进程 ID 为 1234 的进程发送 SIGTERM
// 发送 SIGKILL 强制终止进程
process.kill(1234, 'SIGKILL');
5. process.on('exit', callback)
作用:监听进程退出事件,在进程退出前会触发该事件,在这个阶段,你可以做一些变量清理或者日志输出工作。
示例:
process.on('exit', (code) => {
console.log(`进程即将退出,退出码:${code}`);
});
// 退出进程时触发
process.exit(0);
6. process.on('uncaughtException', callback)
作用:监听未捕获的异常事件。当 Node.js 程序遇到未捕获的异常时,会触发此事件。可以用它来处理意外错误。
示例:
process.on('uncaughtException', (err) => {
console.error('未捕获的异常:', err);
process.exit(1); // 退出进程并返回错误码
});
// 引发未捕获异常
throw new Error('发生未捕获的异常');
7. process.on('SIGINT') 和 process.on('SIGTERM')
作用:捕获进程终止信号(如 Ctrl+C 发送的 SIGINT 信号,或通过外部工具发送的 SIGTERM 信号)。常用于在终止前执行一些清理操作。
示例:
process.on('SIGINT', () => {
console.log('收到 SIGINT 信号,准备退出...');
process.exit(0); // 执行清理后正常退出
});
process.on('SIGTERM', () => {
console.log('收到 SIGTERM 信号,准备退出...');
process.exit(0); // 执行清理后正常退出
});
8. process.on('beforeExit', callback)
作用:监听进程即将退出的事件。这个事件在 Node.js 进程退出之前触发,可以在进程退出之前执行某些操作。与 exit 事件不同,beforeExit 事件是异步的。
示例:
process.on('beforeExit', (code) => {
console.log(`进程即将退出,退出码:${code}`);
});
// 此时,代码会先触发 beforeExit,然后退出
process.exit(0);
9. process.memoryUsage()
作用:获取当前进程的内存使用情况。返回一个对象,包含堆内存、外部内存等的使用情况。
示例:
const memoryUsage = process.memoryUsage();
console.log(memoryUsage);
// 输出:{ rss: 1000000, heapTotal: 500000, heapUsed: 400000, external: 10000 }
10. process.uptime()
作用:获取当前 Node.js 进程自启动以来的运行时间(单位:秒)。
示例:
console.log('进程运行时间(秒):', process.uptime());
11. process.chdir(directory)
作用:改变当前工作目录。通过传入一个目录路径,Node.js 进程会切换到该目录。
process.chdir('/path/to/your/directory');
console.log('当前工作目录是:', process.cwd()); // 显示新的工作目录
12. process.cwd()
作用:获取当前工作目录的路径。
示例:
console.log('当前工作目录是:', process.cwd());
13. process.stdin, process.stdout, process.stderr
作用:这些属性分别表示标准输入、标准输出和标准错误流。可以使用它们来处理输入输出流,例如读取用户输入或写入错误日志。
示例:
// 从标准输入读取数据
process.stdin.on('data', (data) => {
console.log(`输入数据:${data}`);
});
// 向标准输出写数据
process.stdout.write('Hello World!\n');
// 向标准错误写数据
process.stderr.write('这是错误信息!\n');
14. process.setMaxListeners(n)
作用:设置最大事件监听器的数量,避免内存泄漏警告。Node.js 默认允许每个事件最多有 10 个监听器,如果你希望监听器的数量超过这个限制,可以使用该方法。
示例:
process.setMaxListeners(20); // 设置最大监听器数量为 20
15. process.nextTick(callback)
作用:将回调函数推迟到事件循环的下一个周期执行。与 setImmediate() 和 setTimeout() 类似,但 nextTick() 的回调会在当前操作完成后立即执行。
示例:
process.nextTick(() => {
console.log('nextTick callback 执行');
});
总结:
process.exit()和process.abort()用于退出进程,前者可以设置退出码,后者强制崩溃进程。process.on('exit')、process.on('uncaughtException')、process.on('SIGINT')等方法用于监听进程相关事件。process.memoryUsage()和process.uptime()可用于监控进程的资源使用情况和运行时间。process.stdin,process.stdout,process.stderr用于处理输入输出流。process.chdir()和process.cwd()用于更改和获取当前工作目录。process.setMaxListeners()用于管理事件监听器的数量。
以上就是所有进程控制的方法了,大家可以在实际开发中应用。