Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

process #47

Open
Genluo opened this issue Sep 6, 2019 · 1 comment
Open

process #47

Genluo opened this issue Sep 6, 2019 · 1 comment
Labels
Node Node相关

Comments

@Genluo
Copy link
Owner

Genluo commented Sep 6, 2019

通过当前Nodejs进程的信息并对其进行控制

文档部分

1. 事件

  • beforeExit 事件:清空事件循环并且没有其他工作要安排的时候触发
  • disconnect事件:如果使用IPC通道衍生nodejs进程,则IPC通道关闭触发disconnect事件
  • exit事件:当Nodejs进程即将退出的时候
  • message事件: 子进程收到父进程使用childprocess.send()发送消息,就会触发'message'事件
  • multipleResolves事件: 只要promise中存在下面的情况就会触发这个事件,node版本>10.12.0
    • 解决不止一次
    • 拒绝不止一次
    • 解决后拒绝
    • 拒绝后解决
  • rejectionHandled 事件,当promise被拒绝并且错误处理函数附加到它晚于一个nodejs事件循环就会触发这个事件
  • uncaughtException 事件,当未捕获的javascript异常一直 冒泡到事件循环时,会触发这个事件进行处理,类似于全局错误捕获进行处理,没有显示调用退出则不会退出,但是切记正确使用这个事件
  • unhandledRejection事件:如果事件循环的一次轮询中,一个Promise被rejected,并且此promise没有绑定错误处理器,unhandledRejection事件会被触发
  • warning事件:任何时候Nodejs发出进程告警,都会触发warning事件
  • 信号事件:当Nodejs进程接收到一个信号时,会触发信号事件,所有的事件信号文档

2. 方法

  • abort(): 使得Nodejs进程立即结束,并生成一个core文件

  • **chdir(firectory):**变更Nodejs进程的当前工作目录,如果变更失败会抛出异常

  • cpuUsage(): 返回当前进程的用户CPU时间和系统CPU时间的对象,此对象包含user和system属性,如果函数执行传递上一次返回的值,则会计算差值,得到的结果是与上一次的差值

  • cwd: 返回当前Nodejs进程的当前工作目录

  • disconnect():process.disconnect函数会关闭到父进程的IPC频道,以允许子进程一旦没有其他链接来保持活跃就优雅的关闭,详情请看Child Process 和 Cluster的文档

  • dlopen:确实

  • emitWarining: 触发warining事件

  • exit([code]):退出shell执行环境,0代表的成功(默认),1是异常,正确的使用时通过给process.exitCode 赋值进行进程退出,然后触发所有的exit事件监听器之前,node不会终止,更多code码参见文档

  • getegid():返回Nodejs进程的有效数字标记的组身份

  • getuid():返回Nodejs进程的有效数字标识的用户身份

  • getgid():返回Nodejs进程的数字标识的组身份

  • getgroups():返回数组,其中包含了补充的组ID,如果包含有效的组ID

  • hrtime([time]):返回高精度的时间解析值

  • hrtime.bigint():返回整数类型

  • initgroups(): process.initgroups()方法读取/etc/group文件,并且初始化组访问列表,该列表包括了用户所在的所有组。 该方法需要Node.js进程有root访问或者有CAP_SETGID capability才能操作。

  • process.kill(pid, [, signal]):其实这个函数只是发送信号,这点与kill系统调用类似,发送的信号可能是一些与keill目标进程无关的事情

  • nextTick(callback):将callback函数添加到下一个时间点的队列,一旦当轮事件循环全部完成,则调用下一个时间点的队列中的所有回调

  • **send(message):**使用这个方法可以给父进程发送消息,接收到的消息被视为父进程的childProcess对象上一个message事件

  • setegid(id):为进程设计有效的用户组ID

  • setuid(id): 为进程设置有效的用户ID

  • setgid(id):为进程设置有效的组ID

  • setgroups(groups)

  • setuid(id):设置进程的用户ID,id可以是一个数值ID也可以是一个用户名字符串,如果已经有一个用户名,在解析为相关数值ID时,此方法阻塞

  • stderr:(fd 2)属性返回连接到stderr的流,是一个双工流

  • stdin:(fd 0)属性返回连接到stdin的流,是一个双工流

  • stdout:(fd 1) 属性返回连接到stdout的流,是一个双工流

  • unmask([mask]):用于设置Nodejs进程默认创建文件的权限掩码,子进程从父进程继承这个掩码,不传参数时,默认返回当前掩码,如果传递了参数,创建文件掩码被设置为参数值,并且返回之前的掩码

3. 属性

  • allowedNodeEnvironmentFlags:

  • arch 同 os.acrch()方法

  • argv : 返回一个数组,其中包含启动Nodejs进程传入的命令行参数,第一个元素是process.execPath,第二个参数是执行正在执行javascript文件的路径,其余元素将是任何其他命令行的参数

  • channel: 这个属性保存IPC channel的引用

  • config:返回一个对象,描述了用于编译当前Nodejs执行程序时涉及到的配置信息,这一执行./configure脚本生成的config.gypi文件的结果是一样的

  • connected:如果Nodejs进程是由IPC channel方式创建的,只要IPC channel保持连接,这个参数就会返回true,反之,如果调用process.disconeect(),此属性就会返回false

  • env:返回包含用户环境的对象

  • execArgv:返回node进程被启动的时候 ,Nodejs特定的命令行选型,这些选项在Process.argv属性返回的数组中不会出现

  • execPath:返回启动Nodejs进程的可执行文件的绝对路径名

  • exitCode:此数值将作为进程的退出码,可以显示设置,默认为0

  • mainModule: 提供一种获取require.main的替代方法,但是这个模块不同于requrie.main进行缓存,

  • PID:当前进程的PID

  • platform: 返回字符串,标识Nodejs进程运行其上的操作系统平台

  • ppid: 返回当前父进程的进程ID

  • release:返回当前发布的元数据对象,包含源代码等等的URL

  • title:用于获取或设置当前进程在PS命令中显示的进程名字

  • Version 和versions两个方法,返回当前Node的版本信息

理解部分

整个 process模块可以分为两部分,一部分是包含每个进程所需要的属性、方法、时间,另一种是就是通过IPC 创建的方法,他们有一些特定的方法、属性,等等,比如disconnect()等等,合理使用这些方法和属性需要分为这两种情景进行使用

@Genluo Genluo added the Node Node相关 label Sep 6, 2019
@Genluo
Copy link
Owner Author

Genluo commented Sep 6, 2019

如果需要重写process.env 需要根据平台确定分割符,可使用如下确定分隔符

const SEPARATOR = process.platform === 'win32' ? ';' : ':';
// npm script中执行需要添加./node_modules/.bin
const newEnv = `${process.cwd()}/node_modules/.bin${SEPARATOR}${process.env.PATH}`

使用https://github.com/npm/node-semver 处理版本字符串

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Node Node相关
Projects
None yet
Development

No branches or pull requests

1 participant