NodeJs中控制进程的15个方法

696 阅读3分钟

前言

在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 可指定发送的信号(如 SIGTERMSIGKILL 等)。默认情况下,发送的是 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 执行');
});

总结:

  1. process.exit()process.abort() 用于退出进程,前者可以设置退出码,后者强制崩溃进程。
  2. process.on('exit')process.on('uncaughtException')process.on('SIGINT') 等方法用于监听进程相关事件。
  3. process.memoryUsage()process.uptime() 可用于监控进程的资源使用情况和运行时间。
  4. process.stdin, process.stdout, process.stderr 用于处理输入输出流。
  5. process.chdir()process.cwd() 用于更改和获取当前工作目录。
  6. process.setMaxListeners() 用于管理事件监听器的数量。

以上就是所有进程控制的方法了,大家可以在实际开发中应用。