美文网首页
node之process模块

node之process模块

作者: imakan | 来源:发表于2018-11-01 23:56 被阅读0次

    process --进程

    process对象是一个全局对象,他提供当前Node.js进程相关的有关信息,以及控制当前Nodejs进程,因为是全局变量,所以不需要require

    process 事件

    process对象是EventEmitter的实例

    beforeExit事件

    NodeEventLoop为空时,并且没有额外的工作被添加进来,事件beforeExit会被触发。正常情况下,如果没有额外的工作被添加EventLoopNodejs进程会结束,但是如果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 错误类型,一个resolvereject
    • 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()

    • warning <string> | <Error> 发出的警告。

    • 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])

    • pid <number> 进程ID
    • signal <string> | <number> 将发送的信号,类型为string或number。默认为'SIGTERM'

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

    相关文章

      网友评论

          本文标题:node之process模块

          本文链接:https://www.haomeiwen.com/subject/wxaxxqtx.html