美文网首页
Node进程process(二)

Node进程process(二)

作者: 冷r | 来源:发表于2019-08-08 14:43 被阅读0次

    事件'exit'**

    当进程将要退出时触发。这是一个在固定时间检查模块状态(如单元测试)的好时机。需要注意的是 'exit' 的回调结束后,主事件循环将不再运行,所以计时器也会失效:

    process.on('exit', function() {
        // 设置一个延迟执行
        setTimeout(function() {
            console.log('主事件循环已停止,所以不会执行');
        }, 0);
        console.log('退出前执行');
    });
    setTimeout(function() {
        console.log('1');
    }, 500);
    

    事件'uncaughtException'

    捕获那些咱没有 try catch 的异常错误:

    process.on('uncaughtException', function() {
        console.log('捕获到一个异常');
    });
    var a = '123';
    a.a(); //触发异常事件
    console.log('这句话扑街了,不会显示出来');
    

    事件'SIGINT'

    捕获当前进程接收到的信号(如按下了 ctrl + c):

    process.on('SIGINT', function() {
        console.log('收到 SIGINT 信号。');
    });
    
    console.log('试着按下 ctrl + C');
    setTimeout(function() {
        console.log('end');
    }, 50000);
    

    process.stdout

    一个指向标准输出流(stdout)的 可写的流(Writable Stream):

    process.stdout.write('这是一行数据\n这是第二行数据');
    

    process.stderr

    一个指向标准错误流(stderr)的 可写的流(Writable Stream):

    process.stderr.write('输出一行标准错误流,效果跟stdout没差');
    

    process.stdin

    一个指向 标准输入流(stdin) 的可读流(Readable Stream)。标准输入流默认是暂停 (pause) 的,所以必须要调用 process.stdin.resume() 来恢复 (resume) 接收:

    process.stdin.on('end', function() {
        process.stdout.write('end');
    });
    
    function gets(cb){
        process.stdin.setEncoding('utf8');
        //输入进入流模式(flowing-mode,默认关闭,需用resume开启),注意开启后将无法read到数据
        //见 https://github.com/nodejs/node-v0.x-archive/issues/5813
        process.stdin.resume();
        process.stdin.on('data', function(chunk) {
            console.log('start!');
            //去掉下一行可一直监听输入,即保持标准输入流为开启模式
            process.stdin.pause();
            cb(chunk);
        });
        console.log('试着在键盘敲几个字然后按回车吧');
    }
    
    gets(function(reuslt){
        console.log("["+reuslt+"]");
        //process.stdin.emit('end'); //触发end事件
    });
    

    process.argv

    返回当前命令行指令参数 ,但不包括node特殊(node-specific) 的命令行选项(参数)。常规第一个元素会是 'node', 第二个元素将是 .Js 文件的名称。接下来的元素依次是命令行传入的参数:

    //试着执行 $node --harmony argv.js a b
    console.log(process.argv); //[ 'node', 'E:\\github\\nodeAPI\\process\\argv.js', 'a', 'b' ]
    process.argv.forEach(function(val, index, array) {
        console.log(index + ': ' + val);
    });
    

    process.execArgv

    与 process.argv 类似,不过是用于返回 node特殊(node-specific) 的命令行选项(参数)。另外所有文件名之后的参数都会被忽视:

    //试着执行 $node --harmony execArgv a b --version
    console.log(process.execArgv); //[ '--harmony' ]
    process.execArgv.forEach(function(val, index, array) {
        console.log(index + ': ' + val);
    });
    

    process.abort()

    触发node的abort事件,退出当前进程:

    process.abort();
    console.log('在输出这句话之前就退出了');
    

    process.cwd

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

    console.log('当前目录:' + process.cwd()); //当前目录:E:\github\nodeAPI\process
    

    process.chdir(directory)

    改变进程的当前进程的工作目录(该目录必须已存在),若操作失败则抛出异常:

    var path = require('path');
    
    console.log('当前目录:' + process.cwd()); //当前目录:E:\github\nodeAPI\process
    try {
        process.chdir(path.resolve('.','tmp'));
        console.log('新目录:' + process.cwd()); //新目录:E:\github\nodeAPI\process\tmp
    }
    catch (err) {
        console.log('chdir: ' + err);
    }
    

    process.env

    获取当前系统环境信息的对象,常规可以用来进一步获取环境变量、用户名等系统信息:

    console.log(process.env);
    console.log('username: ' + process.env.USERNAME);
    console.log('PATH: ' + process.env.PATH);
    

    process.exit([code])

    终止当前进程并返回给定的 code。如果省略了 code,退出是会默认返回成功的状态码('success' code) 也就是 0:

    process.exit(1); //node的shell将捕获到值为1的返回码
    

    process.exitCode

    可以自定义退出进程时node shell捕获到的状态码(必须是正常结束进程或者使用process.exit()指令退出)

    process.exitCode = 4;
    process.exit();
    

    如果指名了 process.exit(code) 中退出的错误码 (code),则会覆盖掉 process.exitCode 的设置。

    process.version

    一个暴露编译时存储版本信息的内置变量 NODE_VERSION 的属性:

    console.log('版本: ' + process.version); //版本: v0.12.7
    

    process.versions

    一个暴露存储 node 以及其依赖包 版本信息的属性:

    console.log(process.versions);
    //{ http_parser: '2.3',
    //    node: '0.12.7',
    //    v8: '3.28.71.19',
    //    uv: '1.6.1',
    //    zlib: '1.2.8',
    //    modules: '14',
    //    openssl: '1.0.1p' }
    

    process.config

    一个包含用来编译当前 node.exe 的配置选项的对象:

    console.log(process.config);
    //{ target_defaults:
    //{ cflags: [],
    //    default_configuration: 'Release',
    //    defines: [],
    //    include_dirs: [],
    //    libraries: [] },
    //    variables:
    //    { clang: 0,
    //        host_arch: 'x64',
    //        icu_data_file: 'icudt54l.dat',
    //        icu_data_in: '../../deps/icu/source/data/in\\icudt54l.dat',
    //        icu_endianness: 'l',
    //        icu_gyp_path: 'tools/icu/icu-generic.gyp',
    //        icu_locales: 'en,root',
    //        icu_path: 'deps\\icu',
    //        icu_small: true,
    //        icu_ver_major: '54',
    //        node_install_npm: true,
    //        node_prefix: '',
    //        node_shared_cares: false,
    //        node_shared_http_parser: false,
    //        node_shared_libuv: false,
    //        node_shared_openssl: false,
    //        node_shared_v8: false,
    //        node_shared_zlib: false,
    //        node_tag: '',
    //        node_use_dtrace: false,
    //        node_use_etw: true,
    //        node_use_mdb: false,
    //        node_use_openssl: true,
    //        node_use_perfctr: true,
    //        openssl_no_asm: 0,
    //        python: 'C:\\Python27\\python.exe',
    //        target_arch: 'x64',
    //        uv_library: 'static_library',
    //        v8_enable_gdbjit: 0,
    //        v8_enable_i18n_support: 1,
    //        v8_no_strict_aliasing: 1,
    //        v8_optimized_debug: 0,
    //        v8_random_seed: 0,
    //        v8_use_snapshot: false,
    //        visibility: '',
    //        want_separate_host_toolset: 0 } }
    

    process.pid

    获得当前进程的pid:

    console.log(process.pid);
    

    process.kill(pid, [signal])

    结束对应某pid的进程并发送一个信号(若没定义信号值则默认为'SIGTERM'):

    process.kill(process.pid, 'SIGTERM');
    

    process.title

    获取或设置当前进程的标题名称:

    console.log(process.title);
    // 管理员: E:\Program Files\WebStorm 9.0.1\lib\libpty\win\x86\winpty-agent.exe - node  title
    process.title = 'new title!!!';
    console.log(process.title); //new title!!!
    

    process.arch

    返回当前CPU的架构('arm'、'ia32' 或者 'x64'):

    console.log(process.arch); //x64
    

    process.platform

    返回当前平台类型('darwin', 'freebsd', 'linux', 'sunos' 或者 'win32'):

    console.log(process.platform); //win32
    

    process.memoryUsage()

    返回一个对象,它描述了Node进程的内存使用情况,其单位是bytes:

    console.log(process.memoryUsage()); //{ rss: 16875520, heapTotal: 9751808, heapUsed: 3997040 }
    

    process.nextTick(callback)

    算是 process 对象最重要的一个属性方法了,表示在事件循环(EventLoop)的下一次循环中调用 callback 回调函数。

    要注意的是它总会在I/O操作(比如查询数据)之前先执行。

    示例:

    console.log('开始');
    process.nextTick(function() {
        console.log('nextTick');
    });
    setTimeout(function(){
        console.log('setTimeout!')
        }, 2000);
    console.log('当前EventLoop');
    // 输出:
    // 当前EventLoop
    // nextTick
    // setTimeout
    

    更多请到 https://www.jianshu.com/p/c4c655ee3d03

    相关文章

      网友评论

          本文标题:Node进程process(二)

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