[NODE之12]process对象

来源:互联网 发布:国外房产 淘宝 编辑:程序博客网 时间:2024/05/12 00:09
/**进程练习 * Created by liyanq on 17/3/24. * 进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。 * 在早期面向进程设计的计算机结构中,进程是程序的基本执行实体; * 在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。 * 特征 * 动态性:进程的实质是程序在多道程序系统中的一次执行过程,进程是动态产生,动态消亡的。 * 并发性:任何进程都可以同其他进程一起并发执行 * 独立性:进程是一个能独立运行的基本单位,同时也是系统分配资源和调度的独立单位; * 异步性:由于进程间的相互制约,使进程具有执行的间断性,即进程按各自独立的、不可预知的速度向前推进 * 结构特征:进程由程序、数据和进程控制块三部分组成。 * 多个不同的进程可以包含相同的程序:一个程序在不同的数据集里就构成不同的进程,能得到不同的结果; * 但是执行过程中,程序不能发生改变。 * --来自 百度百科 *//**process对象是一个全局对象,它可以在任何地方被访问.它是一个EventEmitter对象的实例.*/const util = require("util");const os = require("os");/*----------------------------------------------------------------------------------*//*beforeExit事件 * 1,listen的函数有参数,这个参数就是exitCode. * 2,通过exit和其他异常退出的进程是不触发监听事件的(重要~)~*/process.once("beforeExit", function (exitCode) {    console.log("beforeExit事件触发了,exitCode:" + exitCode);//beforeExit事件触发了,exitCode:5});process.exitCode = 5;/*----------------------------------------------------------------------------------*//*exit事件 * 1,如果进入了exit的事件中,没有什么方式能阻止进程的结束. * 2,与beforeExit不同的是,process.exit(1)和throw new Error("error")都能触发该事件 * 3,监听函数必须是同步的,setTimeOut里面的内容永远不会执行到~*/process.on("exit", function (exitCode) {    console.log("exit事件触发了,exitCode:" + exitCode);//beforeExit事件触发了,exitCode:5});/*----------------------------------------------------------------------------------*//*rejectionHandled * 1,unhandledRejection:针对promise对象中,如果没有处理的异常或拒绝,那么触发该事件.pRejectionHandled * 2,rejectionHandled:unhandledRejection触发后,又处理了异常或拒绝,那么触发该事件. * 3,注意链式写法与非链式写法的区别,主要看是否是同一对象及触发时机. * */const unhandledRejections = new Map();process.on('unhandledRejection', (reason, p) => {    unhandledRejections.set(p, reason);    // console.log("unhandledRejection事件触发,原因是:" + reason);});process.on('rejectionHandled', (p) => {    unhandledRejections.delete(p);    // console.log("rejectionHandled事件触发,promise对象:" + p);});var pRejectionHandled = new Promise(function (resolve, reject) {    throw "我是Promise对象构造函数里面未处理的异常~";});// setTimeout(function () {//     pRejectionHandled.catch(function (e) {// console.log("我处理了pRejectionHandled异常信息" + e);// });// }, 1000);/*----------------------------------------------------------------------------------*//*uncaughtException事件 *1,捕捉代码里面未捕捉到的异常 *2,处理函数中有err参数 * 3, It is not safe to resume normal operation after 'uncaughtException'. * 注意: * uncaughtException是一个很低级的异常处理,在将来可能被移除. * 不要使用它,用domains代替(后面会讲),如果你非用不可,只好每次在程序发生异常之后重启. * 不要把它和'On Error Resume Next'一起用,因为一个未处理的异常意味着你的程序--甚至是node.js自己-- * 在一个未定义的状态.盲目的恢复继续执行疑问这任何事都可能发生.*/process.on('uncaughtException', function (err) {    // console.log("uncaughtException事件触发了:" + err);//ReferenceError: nonexistentFunc is not defined});setTimeout(function () {    // console.log("即使有异常了,这里仍将执行...");}, 200);// nonexistentFunc();// console.log("我这里永远执行不到了...");/*----------------------------------------------------------------------------------*//*warning事件,这个看了看,估计用不到,以后再说吧~*//*Signal Events * */// process.stdin.resume();process.on('SIGINT', () => {//能捕捉到<Ctrl>-C信号~    console.log('Received SIGINT.  Press Control-D to exit.');});/*----------------------------------------------------------------------------------*//*process.arch:操作系统 CPU 架构 * 同os.arch()*/console.log("操作系统 CPU 架构:" + process.arch);//x64/*----------------------------------------------------------------------------------*//*process.argv:返回当前命令行的参数 * 返回:<Array> * 前2个返回值固定,NODE的安装路径和当前执行的js路径~*/for (const arg of process.argv) {    /*/usr/local/bin/node     /Users/liyanq/WebstormProjects/learnWebPack/school/testProcess.js*/    console.log(arg);}/*----------------------------------------------------------------------------------*//*process.cwd:返回当前进程的工作目录*/console.log("当前进程的工作目录:" + process.cwd());/*----------------------------------------------------------------------------------*//*process.chdir(directory):改变进程的工作目录 * 这个估计也用不到,以后再说吧~*//*----------------------------------------------------------------------------------*//*process.execPath:当前node进程的执行路径*/console.log("node进程的执行路径:" + process.execPath);// /usr/local/bin/node/*----------------------------------------------------------------------------------*//*process.env:用户的环境变量的对象*/console.log("用户的环境变量的对象:" + util.inspect(process.env));/*----------------------------------------------------------------------------------*//*process.versions:暴露存储node以及其依赖包版本信息的属性:*/console.log("依赖包:" + util.inspect(process.versions));/*----------------------------------------------------------------------------------*//*process.memoryUsage() rss代表ram的使用情况,vsize代表总内存的使用大小,包括ram和swap heapTotal and heapUsed refer to V8's memory usage. external refers to the memory usage of C++ objects bound to JavaScript objects managed by V8. * { rss: 19169280, * heapTotal: 7376896, * heapUsed: 3379344, * external: 8748 } */console.log("进程的所占内存:" + util.inspect(process.memoryUsage()));/*----------------------------------------------------------------------------------*//*process.platform*/console.log("进程的运行平台:" + util.inspect(process.platform));//darwin/*----------------------------------------------------------------------------------*//*process.uptime():包含当前进程运行的时长(秒)*/console.log("进程的运行时间(s):" + process.uptime());//0.075s/*----------------------------------------------------------------------------------*//*process.hrtime():返回当前的高分辨时间,形式为 [秒,纳秒] 的元组数组。 它是相对于在过去的任意时间。该值与日期无关,因此不受时钟漂移的影响。 主要用途是可以通过精确的时间间隔,来衡量程序的性能。*/var t1 = process.hrtime();var arr = new Array(40000000),    s = arr.join(',');var t2 = process.hrtime();console.log('处理数组共花费了%d秒,详细为%d纳秒', (t2[0] - t1[0]), (t2[1] - t1[1]));/*----------------------------------------------------------------------------------*//*process.getuid():获得线程的用户id,这是一个数字id,不是一个用户名.这个函数支持posix平台,不支持windows平台 * process.setuid(id):设置执行进程的用户ID。参数可以使一个数字ID或者用户名字符串。如果指定了一个用户名,那么该方法会阻塞等待将用户名解析为数字ID*/if (process.getuid && process.setuid) {    console.log('当前uid: ' + process.getuid());    try {        // process.setuid(501);        console.log('新uid: ' + process.getuid());    }    catch (err) {        console.log('设置uid 失败: ' + err);    }}/*----------------------------------------------------------------------------------*//*process.getgid:获取进程的群组标识。获取到的是群组的数字ID,不是群组名称。 * process.setgid(id):设置进程的群组标识。参数可以是一个数字ID或者群组名字符串。 *                    如果指定了一个群组名,这个方法会阻塞等待将群组名解析为数字ID。*/if (process.getgid) {    console.log('当前 gid: ' + process.getgid());}if (process.getgid && process.setgid) {    console.log('当前 gid: ' + process.getgid());    try {        process.setgid(501);        console.log('新 gid: ' + process.getgid());    }    catch (err) {        console.log('设置 gid 失败: ' + err);//设置 gid 失败: Error: EPERM, Operation not permitted    }}/*----------------------------------------------------------------------------------*//*process.nextTick(callback[, ...args]) * 算是 process 对象最重要的一个属性方法了,表示在事件循环(EventLoop)的下一次循环中调用 callback 回调函数。 * 要注意的是它总会在I/O操作(比如查询数据)之前先执行。*/function processNextTick(arg, callback) {    if (arg) {        process.nextTick(callback);//下一次循环中调用    }}processNextTick(true, function () {    console.log("我是第二个执行的函数")});console.log("我是第一个执行的函数");/*process.stdin* 有data事件的监听后,readable的事件就不触发了~~~*/process.stdin.setEncoding('utf8');process.stdin.on('data', (data) => {    process.stdout.write(`data: ${data}`);});process.stdin.on('readable', () => {    var chunk = process.stdin.read();    if (chunk !== null) {        process.stdout.write(`readable data: ${chunk}`);    }});process.stdin.on('end', () => {    process.stdout.write('end');});/*----------------------------------------------------------------------------------*//* 文档说是和子进程、集群有关系,以后再说吧~~ * process.connected:连接事件 * disconnect事件:断开连接 * * message事件:监听函数有2个参数 * message: <Object> a parsed JSON object or primitive value * sendHandle: <Handle object> a net.Socket or net.Server object, or undefined. * * process.send(message[, sendHandle[, options]][, callback]) * message <Object> * sendHandle <Handle object> * options <Object> * callback <Function> * Returns: <Boolean> * If Node.js is spawned with an IPC channel, the process.send() method can be used to send messages to the parent process. * Messages will be received as a 'message' event on the parent's ChildProcess object. * If Node.js was not spawned with an IPC channel, process.send() will be undefined. * Note: This function uses JSON.stringify() internally to serialize the message. * 属于子进程、集群与主进程交流的通道,以后再说吧~*/
http://nodejs.cn/api/process.html#process_process_abort
0 0
原创粉丝点击