[TOC]
# 介绍
文档:[http://nodejs.cn/api/process.html](http://nodejs.cn/api/process.html)
官方解释:process 对象是一个 global 全局变量,提供有关信息,控制当前 Node.js 进程。作为一个对象,它对于 Node.js 应用程序始终是可用的,故无需使用 `require()`。
process(进程)其实就是存在 nodejs 中的一个全局变量。
process 内容:
```
$ node process.js
process {
title: 'node',
version: 'v4.4.4',
moduleLoadList:
[....],
versions:
{ http_parser: '2.5.2',
node: '4.4.4',
v8: '4.5.103.35',
uv: '1.8.0',
zlib: '1.2.8',
ares: '1.10.1-DEV',
icu: '56.1',
modules: '46',
openssl: '1.0.2h' },
arch: 'x64',
platform: 'darwin',
release:
{ name: 'node',
lts: 'Argon',
sourceUrl: 'https://nodejs.org/download/release/v4.4.4/node-v4.4.4.tar.gz',
headersUrl: 'https://nodejs.org/download/release/v4.4.4/node-v4.4.4-headers.tar.gz' },
argv:
[ '/Users/tugenhua/.nvm/versions/node/v4.4.4/bin/node',
'/Users/tugenhua/个人demo/process.js' ],
execArgv: [],
env:
{ TERM_PROGRAM: 'Apple_Terminal',
SHELL: '/bin/zsh',
TERM: 'xterm-256color',
TMPDIR: '/var/folders/l7/zndlx1qs05v29pjhvkgpmhjm0000gn/T/',
Apple_PubSub_Socket_Render: '/private/tmp/com.apple.launchd.7Ax4C1EWMx/Render',
TERM_PROGRAM_VERSION: '404',
TERM_SESSION_ID: '82E05668-442D-4180-ADA3-8CF64D85E5A9',
USER: 'tugenhua',
SSH_AUTH_SOCK: '/private/tmp/com.apple.launchd.MYOMheYcL3/Listeners',
PATH: '/Users/tugenhua/.nvm/versions/node/v4.4.4/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin',
PWD: '/Users/tugenhua/个人demo',
LANG: 'zh_CN.UTF-8',
XPC_FLAGS: '0x0',
XPC_SERVICE_NAME: '0',
SHLVL: '1',
HOME: '/Users/tugenhua',
LOGNAME: 'tugenhua',
SECURITYSESSIONID: '186a8',
OLDPWD: '/Users/tugenhua/工作文档/sns_pc',
ZSH: '/Users/tugenhua/.oh-my-zsh',
PAGER: 'less',
LESS: '-R',
LC_CTYPE: 'zh_CN.UTF-8',
LSCOLORS: 'Gxfxcxdxbxegedabagacad',
NVM_DIR: '/Users/tugenhua/.nvm',
NVM_NODEJS_ORG_MIRROR: 'https://nodejs.org/dist',
NVM_IOJS_ORG_MIRROR: 'https://iojs.org/dist',
NVM_RC_VERSION: '',
MANPATH: '/Users/tugenhua/.nvm/versions/node/v4.4.4/share/man:/usr/local/share/man:/usr/share/man:/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.13.sdk/usr/share/man:/Applications/Xcode.app/Contents/Developer/usr/share/man:/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/share/man',
NVM_PATH: '/Users/tugenhua/.nvm/versions/node/v4.4.4/lib/node',
NVM_BIN: '/Users/tugenhua/.nvm/versions/node/v4.4.4/bin',
_: '/Users/tugenhua/.nvm/versions/node/v4.4.4/bin/node',
__CF_USER_TEXT_ENCODING: '0x1F5:0x19:0x34' },
pid: 14034,
features:
{ debug: false,
uv: true,
ipv6: true,
tls_npn: true,
tls_sni: true,
tls_ocsp: true,
tls: true },
_needImmediateCallback: false,
config: {},
nextTick: [Function: nextTick],
_tickCallback: [Function: _tickCallback],
_tickDomainCallback: [Function: _tickDomainCallback],
stdout: [Getter],
stderr: [Getter],
stdin: [Getter],
openStdin: [Function],
exit: [Function],
kill: [Function],
mainModule:
Module {
id: '.',
exports: {},
parent: null,
filename: '/Users/tugenhua/个人demo/process.js',
loaded: false,
children: [],
paths:
[ '/Users/tugenhua/个人demo/node_modules',
'/Users/tugenhua/node_modules',
'/Users/node_modules',
'/node_modules'
]
}
}
```
# `process.env`
官方: `process.env` 属性返回一个包含用户环境信息的对象。返回项目运行所在环境的一些信息。
文档:[process_process_env](http://nodejs.cn/api/process.html#process_process_env)
# `process.argv`
命令行参数可通过系统变量`process.argv`获取。
`process.argv` 返回一个数组:第一个是 node 第二个是脚本文件 第三个是输入的参数,`process.argv[2]`开始得到才是真正的参数部分。
> [yargs-parser](https://github.com/yargs/yargs-parser)
# `process.stdin`
`stdout`、`stdin`和`stderr`是标准流(standard streams),当程序执行时,它们连接程序及其环境之间的输入和输出通信通道。
流通常指的是数据的流动。你可以把流想象成工厂里的传送带,连接着不同的机器(在我们这里是程序)。不同的机器可以以某种方式被安排、引导并与皮带(管道)连接以产生特定的结果。
就像我们可以连接物理 I/O 设备(通过鼠标输入,通过监视器输出)一样,标准流将其抽象出来,赋予我们代码的可组合能力。
![](https://img.kancloud.cn/f7/27/f727d21869a74a24d30da2a7b00697cd_730x361.png)
就像我们可以从小的命令中组合出强大的 Linux 命令一样,我们可以使用 Node.js 标准流来实现同样的效果。
当我们运行一个 Node.js 程序时,会启动一个进程来执行该程序。
[GNU 文档](https://www.gnu.org/software/libc/manual/html_node/Processes.html)将进程定义为系统资源分配的基本单元。每个进程都有自己的地址空间和(通常)一个控制线程。一个进程意味着执行一个程序;你可以让多个进程执行同一个程序,但是每个进程在自己的地址空间中都有自己的程序副本,并且独立于其他副本执行该程序。
每个进程会使用三个打开的文件描述符进行初始化,分别是`stdin`、`stdout`和`stderr`。
这三个文件描述符统称为标准流。
一个进程启动时,同时就会有一组标准流,我们可以通过 Node.js 中的 process 对象访问它们。
标准流被当作文件来处理。访问任何文件的一种简单方法是使用与之相关联的唯一文件描述符。在这些标准流的情况下,每个标准流都有唯一的值。
* [`process.stdin`](https://nodejs.org/api/process.html#processstdin)(0): The standard input stream, which is a source of input for the program
* [`process.stdout`](https://nodejs.org/api/process.html#processstdout)(1): The standard output stream, which is a source of output from the program
* [`process.stderr`](https://nodejs.org/api/process.html#processstderr)(2): The standard error stream, which is used for error messages and diagnostics issued by the program
> [Using stdout, stdin, and stderr in Node.js](https://blog.logrocket.com/using-stdout-stdin-stderr-node-js/)
# Nodejs 进程信号
[https://zhuanlan.zhihu.com/p/148538831](https://zhuanlan.zhihu.com/p/148538831)
[https://www.jianshu.com/p/7a11ac2a973b](https://www.jianshu.com/p/7a11ac2a973b)
# 参考
[node 中的 process 模块](https://github.com/SunShinewyf/issue-blog/issues/37)