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版本的模块进行编译。










网友评论