node之process模块
process --进程
process
对象是一个全局对象,他提供当前Node.js进程相关的有关信息,以及控制当前Nodejs进程,因为是全局变量,所以不需要require
process 事件
process
对象是EventEmitter
的实例
beforeExit
事件
当Node
的EventLoop
为空时,并且没有额外的工作被添加进来,事件beforeExit
会被触发。正常情况下,如果没有额外的工作被添加EventLoop
,Nodejs
进程会结束,但是如果beforeExit
事件绑定的监听器的回调函数中,含有一个可以进行异步调用的操作,那么Nodejs
进程会继续进行。
process.exitCode
作为唯一的参数值传递给beforeExit
事件监听器的回调函数。
如果进程是由显式的错误导致终止,则beforeExit
事件不会被触发。
disconnect
事件
如果node进程是由IPC通道方式创建的,当IPC通道关闭是,会触发disconnect
事件
exit
事件
两种情况下exit
事件会被触发
- 显式调用
process.exit()
方法,使得Node.js进程即将结束 - Node事件循环数组中不在有额外的工作
exit
事件监听器的回调函数,只有一个入参,这个参数的值可以是process.exitCode
的值,或者是调用process.exit()
方法事传入的exitCode
值
process.on('exit',(code) => {
console.log(code)
setTimeout(() => {
console.log('该函数不会被执行')
})
})
message
事件
如果Node.js进程是由IPC通道的方式创建的,当子进程收到父进程发送的消息时,childprocess_send()发送
,会触发message
事件
multipleResolve
事件
- type 错误类型,一个
resolve
或reject
- promise 不止一次解决或拒绝的承诺、
- value 在原始解析后解析或拒绝承诺的值
process.on('multipleResolves', (type, promise, reason) => {
console.error(type, promise, reason);
setImmediate(() => process.exit(1));
})
async function main() {
try {
return await new Promise((resolve, reject) => {
resolve('First call');
resolve('Swallowed resolve');
reject(new Error('Swallowed reject'));
});
} catch {
throw new Error('Failed');
}
}
main().then(console.log);
'uncaughtException'
事件
如果 Javascript 未捕获的异常,沿着代码调用路径反向传递回事件循环,会触发 'uncaughtException' 事件。 Node.js 默认情况下会将这些异常堆栈打印到 stderr 然后进程退出。 为 'uncaughtException' 事件增加监听器会覆盖上述默认行为。
正确使用uncaughtException
事件的方式,是用它在进程结束前执行一些已分配资源(比如文件描述符,句柄等等)的同步清理操作。触发uncaughtException
事件后,用它来尝试恢复应用正常运行的操作是不安全的。
unhandledRejection
事件
function SomeResource() {
// 将 loaded 的状态设置为一个 rejected promise。
this.loaded = Promise.reject(new Error('错误信息'));
}
const resource = new SomeResource();
// resource.loaded 上没有 .catch 或 .then。
warning
事件
任何时候Node,js发出进程告警,都会触发waring
事件
'warning'
事件监听器的回调函数,参数只有一个,其值为Error
对象。此对象有三个重要的属性用来描述告警:
-
name
<string> 告警的名称(目前默认值是Warning
)。 -
message
<string> 系统提供的对此告警的描述。 -
stack
<string> 当告警触发时,包含代码位置的堆栈信息。
process.on('warning', (warning) => {
console.warn(warning.name); // 打印告警名称
console.warn(warning.message); // 打印告警信息
console.warn(warning.stack); // 打印堆栈信息
});
-
--no-warning
: 可以阻止默认从console输出警告信息 -
--trace-warnings
:可以让默认的console输出告警信息,包含告警的全部堆栈信息 -
--throw-deprecation
:命令行选项标志启动Node.js,会使得`custom deprecation warning作为异常信息抛出来 -
--trace-deprecation
:命令行选项标志,会使得custom deprecation warning打印到stderr,包括其堆栈信息。 -
--no-deprecation
命令行选项标志,会阻止报告所有的custom deprecation warning
process.abort()
process.abort()方法会使Node.js进程立即结束,并生成一个core文件。
process.arch
process.arch属性返回一个表示操作系统CPU架构的字符串,Node.js二进制文件是为这些架构编译的。 例如 'arm', 'arm64', 'ia32', 'mips', 'mipsel', 'ppc', 'ppc64', 's390', 's390x', 'x32', 或 'x64'。
process.argv
process.argv
属性返回一个数组,这个数组包含了启动Node.js进程时的命令行参数。第一个元素为process.execPath
。如果需要获取argv[0]
的值请参见 process.argv0
。第二个元素为当前执行的JavaScript文件路径。剩余的元素为其他命令行参数。
process.argv0
process.argv0属性,保存Node.js启动时传入的argv[0]参数值的一份只读副本。
process.channel
如果Nodejs进程是由IPC channel 方式创建的,process.channel属性保存IPC channer的引用,如果IPC channel 不存在,此属性值为undefined
process.chdir(directory)
process.chdir()
方法变更Node.js进程的当前工作目录,如果变更目录失败会抛出异常(相当于linux的cd命令)
process.config
process.config
属性返回一个JavaScript对象。此对象描述了用于变异当前Node执行程序时设计的配置信息。这与执行./configure
脚本生成的config.gypi
文件结果是一样的
process.config属性值不是只读的,在Node.js生态系统中已经有模块扩展,修改或完全替换了process.config的值
process.connected
如果Node.js进程是由IPC channel 方式创建的,只要IPC channel 保持连接,process.connected属性就会返回true。process.disconnect()
被调用后,此属性返回false
process.connected如果为false,则不能通过IPC channel 使用process.send()
发送消息
process.cpuUsage([previousValue])
process.cpuUsage()方法返回包含当前进程的用户CPU时间和系统CPU时间的对象
process.cwd()
process.cwd()
方法返回nodejs进程当前工作
process.debugPort()
nodejs debug的端口
process.disconnect()
如果Node.js进程是从IPC频道派生出来的,process.disconnect()
函数会关闭到父进程的IPC频道,以允许子进程一旦没有其他链接来保持活跃就关闭
process.emitWarning()
-
options
<对象>-
type
<string> 如果warning
是String,type
是警告类型的名字。 默认值:Warning
。 -
code
<string> 当前警告的唯一标识符。 -
ctor
<Function> 如果warning
是String,ctor
是可选的function,用于限制生成的堆栈信息。默认process.emitWarning
-
detail
<string> error的附加信息。
-
process.emitWarning()
方法可用于发出定制的或应用特定的进程警告。 可以通过给process.on('warning')
事件增加处理器,监听这些警告。
// Emit a warning with a code and additional detail.
process.emitWarning('Something happened!', {
code: 'MY_WARNING',
detail: 'This is some additional information'
});
// Emits:
// (node:56338) [MY_WARNING] Warning: Something happened!
// This is some additional information
process.on('warning', (warning) => {
console.warn(warning.name); // 'Warning'
console.warn(warning.message); // 'Something happened!'
console.warn(warning.code); // 'MY_WARNING'
console.warn(warning.stack); // Stack trace
console.warn(warning.detail); // 'This is some additional information'
});
process.env
process.env
属性返回一个包含用户环境信息的对象
在process.env中新增一个属性,会将属性值转换成字符串
process.env.foo = 'bar';
console.log(process.env.foo);
process.execArgv
process.execAargv
属性返回当Node.js进程被启动时,Node.js特定的命令行选项。这些选项在process.argv属性返回的数组中不会出现
node --harmony script.js --version
process.execArgv
的结果
['--harmony']
process.execPath
返回启动Node进程的可执行文件所在的绝对路径
process.exit([code])
process.exit()
方法以结束状态码code指示Node.js同步终止进程。如果code为提供。次exit方法要么使用sucess
状态码0,要么使用process.exitCode
属性值
process.getegid()
返回Node进程的有效数字标记的组身份
process.geteuid()
返回node进程有效数字标记的用户身份
process.getgid()
返回node进程的数字标记的组身份
process.getgroups()
返回数组,其中包含了补充的组ID。
process.getuid()
返回node进程的数字标记的用户身份
process.hrtime([time])
process.hrtime()方法返回当前时间以[seconds, nanoseconds] tuple Array表示的高精度解析值, nanoseconds是当前时间无法使用秒的精度表示的剩余部分。
process.hrtime()返回的时间,都是相对于过去某一时刻的值,与一天中的时钟时间没有关系,因此不受制于时钟偏差。 此方法最主要的作用是衡量间隔操作的性能:
const NS_PER_SEC = 1e9;
const time = process.hrtime();
// [ 1800216, 25 ]
setTimeout(() => {
const diff = process.hrtime(time);
// [ 1, 552 ]
console.log(`Benchmark took ${diff[0] * NS_PER_SEC + diff[1]} nanoseconds`);
// benchmark took 1000000552 nanoseconds
}, 1000);
process.kill(pid[,signal])
process.kill()
方法将signal
发送给pid
标识的进程。
process.on('SIGHUP', () => {
console.log('Got SIGHUP signal.');
});
setTimeout(() => {
console.log('Exiting.');
process.exit(0);
}, 100);
process.kill(process.pid, 'SIGHUP');
process.mainModule
process.mainModule
属性提供了一种获取require.main
的替代方式,区别在与,若主模块在运行时中发生改变。require.main
可能仍然指向变化之前所依赖的模块 一般来说,假定require.main
和process.mainModule
引用相同的模块是安全的。
process.memoryUsage()
返回node进程的内存使用情况的对象
process.nextTick(callback[,...args])
process.nextTick()
方法将callback
添加到“next tick 队列”。一旦当前事件轮询队列的任务全部完成,在next tick 队列中的所有callback 会被依次调用
process.pid
返回进程的PID
process.platform
process.platform属性返回字符串,标识Node.js进程运行其上的操作系统平台。
process.ppid
返回当前父进程的进程ID
process.release
返回node的相关信息
{
name: 'node',
lts: 'Argon',
sourceUrl: 'https://nodejs.org/download/release/v4.4.5/node-v4.4.5.tar.gz',
headersUrl: 'https://nodejs.org/download/release/v4.4.5/node-v4.4.5-headers.tar.gz',
libUrl: 'https://nodejs.org/download/release/v4.4.5/win-x64/node.lib'
}
process.send(message[,sendHandle[,option]],callback])
如果node进程是通过IPC通信产生的,那么process.send()可以与父进程通信,发送消息
process.setegid(id)
process.setegid()
方法为进程设置有效的用户组ID。(请看 setegid(2)
.) id
可以传一个数值ID或传一个用户组名称字符串。如果传了后者的话,会解析成一个相关的数值ID, 解析的时候,这个方法方法是阻塞的。
process.seteuid(id)
process.seteuid()
方法为进程设置有效的用户ID。(请看 seteuid(2)
.) id
可以传一个数值ID或传一个用户名字符串。如果传了特定的用户名字符串,会解析成一个相关的数值ID, 解析的时候,这个方法方法是阻塞的。
process.setgid(id)
process.setgid() 为进程方法设置组ID. (查看setgid(2).) 可给id参数传一个数值ID或字符串名。
process.stderr
process.stder
返回连接到stderr(fd 2)的流
process.stdin
process.stdin
属性返回连接到 stdin
(fd 0
)的流。 它是一个net.Socket
(它是一个Duplex流),除非 fd 0
指向一个文件,在这种情况下它是一个Readable流。
process.stdin.setEncoding('utf8');
process.stdin.on('readable', () => {
const chunk = process.stdin.read();
if (chunk !== null) {
process.stdout.write(`data: ${chunk}`);
}
});
process.stdin.on('end', () => {
process.stdout.write('end');
});
process.stdout
process.stdout
属性返回连接到 stdout
(fd 1
)的流。 它是一个net.Socket
(它是一个Duplex流), 除非 fd 1
指向一个文件,在这种情况下它是一个[可写][]流。
例1: 将输入流数据输出到输出流,即输出到终端。
process.stdin.pipe(process.stdout);
process.throwDeprecation
属性表示--throw-deprecation
标记是否被设置到当前Node进程上
process.title
process.title 属性用于获取或设置当前进程在ps命令中显示的进程名字
process.umask([mask])
process.umask()方法用于返回或设置Node.js进程的默认创建文件的权限掩码。子进程从父进程继承这个掩码。 不传参数时,默认返回当前掩码,如果传递了参数,创建文件掩码就被设置为参数值,并且返回之前的掩码
const newmask = 0o022;
const oldmask = process.umask(newmask);
console.log(
`Changed umask from ${oldmask.toString(8)} to ${newmask.toString(8)}`
);
process.uptime
process.uptime()
方法返回当前 Node.js 进程运行时间秒长
process.version()
process.version 属性返回Node.js的版本信息。
process.versions
process.versions属性返回一个对象,此对象列出了Node.js和其依赖的版本信息。 process.versions.modules表明了当前ABI版本,此版本会随着一个C++API变化而增加。 Node.js会拒绝加载模块,如果这些模块使用一个不同ABI版本的模块进行编译。