极简 Node.js 入门 - 2.3 process
极简 Node.js 入门系列教程:https://www.yuque.com/sunluyong/node
process 对象是一个全局变量,是一个 EventEmitter 实例,提供了当前 Node.js 进程的信息和操作方法
系统信息
process 对象提供了属性用于返回关键系统信息,常用的有
- title:进程名称,默认值 node,程序可以修改,可以让错误日志更清晰
- pid:当前进程 pid
- ppid:当前进程的父进程 pid
- platform:运行进程的操作系统(aix、drawin、freebsd、linux、openbsd、sunos、win32)
- version:Node.js 版本
- env:当前Shell的所有环境变量
stdin & stdout
Node.js 和标准输入、输出设备交互对象也通过 process 对象提供
process.stdin.pipe(process.stdout)
简单一行代码可以实现把控制台输入内容在控制台原样打印出来
执行信息
process.execPath
process.execPath 属性返回执行当前脚本的 Node 二进制文件的绝对路径
process.argv
process.argv 属性返回一个数组,内容是执行脚本时的参数,但数组前两个固定
- 执行当前脚本的 Node 二进制文件的绝对路径
- 当前执行文件绝对路径
process.js
console.log(process.argv);
node process.js a --b=2
[
'/usr/local/bin/node',
'/Users/undefined/node-demo/process.js',
'a',
'--b=2'
]
process.execArgv
process.execArgv 属性返回一个数组,成员是命令行下执行脚本时,在 Node 可执行文件与脚本文件之间的命令行参数
process.js
console.log(process.execArgv);
node --inspect process.js
[ '--inspect' ]
常用操作方法
- process.chdir():切换工作目录到指定目录
- process.cwd():返回运行当前脚本的工作目录的路径,也就是执行 node 命令时候的目录
- process.exit():退出当前进程
- process.memoryUsage():返回 Node.js 进程的内存使用情况
进程事件
process 对象是 EventEmitter 对象实例,可以监听一些系统核心事件, 常使用的有
exit
当 Node.js 进程因以下原因之一即将退出时,则会触发 exit 事件:
- 显式调用
process.exit()方法 - Node.js 事件循环不再需要执行任何其他工作
此时无法阻止退出事件循环,并且一旦所有 exit 事件的监听器都已完成运行时,Node.js 进程将终止
process.on('exit', (code) => {
console.log(`退出码: ${code}`);
});
uncaughtException
当前进程抛出一个没有被捕捉的错误时,会触发uncaughtException事件
process.on('uncaughtException', function (err) {
console.error(err.stack);
});
beforeExit
当 Node.js 清空其事件循环并且没有其他工作要安排时,会触发 beforeExit 事件。 通常 Node.js 进程将在没有调度工作时退出,但是在 beforeExit 事件上注册的监听器可以进行异步调用使 Node.js 进程继续
process.on('beforeExit', (code) => {
console.log('进程 beforeExit 事件的代码: ', code);
});
process.on('exit', (code) => {
console.log('进程 exit 事件的代码: ', code);
});
console.log('此消息最新显示');
// 打印:
// 此消息最新显示
// 进程 beforeExit 事件的代码: 0
// 进程 exit 事件的代码: 0
message
如果使用 IPC 通道 fork Node.js 进程,子进程收到父进程使用 childprocess.send() 发送的消息,就会触发 message 事件
process.on('message', (m) => {
console.log('子进程收到消息', m);
});
process.nextTick(callback)
process.nextTick() 方法将 callback 添加到下一个时间点的队列执行
极简 Node.js 入门 - 2.3 process的更多相关文章
- 极简 Node.js 入门 - 2.2 事件
极简 Node.js 入门系列教程:https://www.yuque.com/sunluyong/node 本文更佳阅读体验:https://www.yuque.com/sunluyong/node ...
- 极简 Node.js 入门 - 2.4 定时器
极简 Node.js 入门系列教程:https://www.yuque.com/sunluyong/node 本文更佳阅读体验:https://www.yuque.com/sunluyong/node ...
- 极简 Node.js 入门 - 4.3 可读流
极简 Node.js 入门系列教程:https://www.yuque.com/sunluyong/node 本文更佳阅读体验:https://www.yuque.com/sunluyong/node ...
- 极简 Node.js 入门 - 4.4 可写流
极简 Node.js 入门系列教程:https://www.yuque.com/sunluyong/node 本文更佳阅读体验:https://www.yuque.com/sunluyong/node ...
- 极简 Node.js 入门 - Node.js 是什么、性能有优势?
极简 Node.js 入门系列教程:https://www.yuque.com/sunluyong/node 本文更佳阅读体验:https://www.yuque.com/sunluyong/node ...
- 极简 Node.js 入门 - 1.2 模块系统
极简 Node.js 入门系列教程:https://www.yuque.com/sunluyong/node 本文更佳阅读体验:https://www.yuque.com/sunluyong/node ...
- 极简 Node.js 入门 - 1.3 调试
极简 Node.js 入门系列教程:https://www.yuque.com/sunluyong/node 本文更佳阅读体验:https://www.yuque.com/sunluyong/node ...
- 极简 Node.js 入门 - 1.4 NPM & package.json
极简 Node.js 入门系列教程:https://www.yuque.com/sunluyong/node 本文更佳阅读体验:https://www.yuque.com/sunluyong/node ...
- 极简 Node.js 入门 - 2.1 Path
极简 Node.js 入门系列教程:https://www.yuque.com/sunluyong/node 本文更佳阅读体验:https://www.yuque.com/sunluyong/node ...
随机推荐
- Redis 6.0 新特性 ACL 介绍
Redis 6.0 新特性 ACL 介绍 Intro 在 Redis 6.0 中引入了 ACL(Access Control List) 的支持,在此前的版本中 Redis 中是没有用户的概念的,其实 ...
- 30个Linux Shell脚本经典案例(上)
编写Shell过程中注意事项: 开头加解释器:#!/bin/bash 语法缩进,使用四个空格:多加注释说明. 命名建议规则:变量名大写.局部变量小写,函数名小写,名字体现出实际作用. 默认变量是全局的 ...
- C# 判断和创建目录路径
在进行一些导出或下载时,需要创建一个本地路径,以供文件进行下载和创建. if (Directory.Exists(Server.MapPath("~/upimg/hufu")) = ...
- STL源码剖析:算法
启 算法,问题之解法也 算法好坏的衡量标准:时间和空间,单位是对数.一次.二次.三次等 算法中处理的数据,输入方式都是左闭又开,类型就迭代器, 如:[first, last) STL中提供了很多算法, ...
- 题解 洛谷 P5311 【[Ynoi2011]成都七中】
每次询问是关于 \(x\) 所在的连通块,所以考虑用点分树来解决本题. 点分树上每个节点所对应的子树,都是原树中的一个连通块.询问中给定 \(x\) 和区间 \([l,r]\),其就已经确定了原树的一 ...
- python numpy库np.percentile用法说明
在python中计算一个多维数组的任意百分比分位数,此处的百分位是从小到大排列,只需用np.percentile即可…… a = range(1,101) #求取a数列第90%分位的数值 np.per ...
- jsp课堂笔记3
Http协议是一种无状态协议,一个用户向服务器发出请求(request),然后服务器返回响应(response),在服务端不保留链接相关信息.session对象可以使服务器记住当前用户 reque ...
- .NET Core + K8S + Loki 玩转日志聚合
1. Intro 最近在了解日志聚合系统,正好前几天看到一篇文章<用了日志系统新贵Loki,ELK突然不香了!>,所以就决定动手体验一下.本文就带大家快速了解下Loki,并简单介绍.NET ...
- IO—》递归
递归的概述 递归,指在当前方法内调用自己的这种现象 public void method(){ System.out.println(“递归的演示”); //在当前方法内调用自己 method(); ...
- clion更改大括号的位置
进入setting 搜索code style 如果是c++ /c 选择这个选项点开 wrapping and brace 里面 有brace placement 选择你想要的方式