process

  • 这个模块是单线程的,无法完全利用多核CPU

基本信息

//程序目录
process.cwd(); //应用程序当前目录
process.chdir('/home'); //改变应用程序的当前目录
process.cwd(); //进程信息
process.pid; //当前进程pif
process.execPath; //运行当前进程的可执行文件的绝对地址
process.title; //当前进程名称, 默认与process.execPath相同
process.argv; //当前进程命令行参数数组 //Node信息
process.versions; //Nodejs版本属性
process.version; //Nodejs版本号
process.config //Nodejs配置信息 //系统信息
process.platform; //系统平台
process.arch; //cpu架构
process.env; //shell环境参数变量

输入输出流

//标准输出
console.log = function(data) {
process.stdout.write(data + '\n')
} //错误输出
process.stderr.write('err: ' + new Error('err')); //标准输入
process.stdin.setEncoding('utf8')
process.stdin.on('readable', function () {
var chunk = process.stdin.read()
if(chunk !== null) {
process.stdout.write('Print: ' + chunk + '\n')
}
}) .on('end', function () {
process.stdout.write('end\n')
})

kill当前进程

process.on('SIGHUP', function () {
console.log('SIGHUP');
}) setTimeout(function () {
console.log('Exiting...');
process.exit(0) //该方法杀死当前进程
console.log('out process id: ' + process.pid); //这里没有执行
}, 1000) process.kill(process.pid, 'SIGHUP'); //仅仅是一个信号发送器,并没有杀死进程

异步方法

  • process.nextTick

child_process

  • 这个模块可以通过子进程来实现多核CPU的有效利用

spawm(command, [arg])

var spawn = require('child_process').spawn;

var cat = spawn('cat'); //创建子进程

//控制台输出对象data事件
cat.stdout.on('data', function (data) {
console.log('stdout: ' + data);
}) cat.on('error', function (code) {
console.log('cat error: ' + code)
}) cat.on('exit', function (code) {
console.log('cat exit');
}) cat.on('close', function (code) {
console.log('cat closed');
}) //控制台输入对象处理
cat.stdin.write('cat on data!\n');
cat.stdin.write('new line data!');
cat.stdin.end();
  • exit事件表示退出,但子进程的标准输入输出流可能仍为开启
  • close事件表示关闭,子进程的所有标准输入输出流都终止时触发
  • 参数code正常是为0,非正常为1~3

exec(command, callback)

var exec = require('child_process').exec;

var cat = exec('cat text.txt', function (error, stdout, stderr) {
console.log(stdout);
console.log(stderr);
if(stderr) {
console.log(error);
}
});

两者比较

  • spawn 方法是异步中的异步, 在子进程开始执行时,它就开始从一个流从子进程返回给Node;适合想要子进程返回大量数据给Node操作,如图形处理,读取二进制;
  • exec方法是同步中的异步,它会等到子进程运行结束后再一次性返回所有buffer数据;如果execbuffer体积设置得不够大,会错误失败maxBuffer exceeded;

execFile(file, [arg], callback)

  • exec方法相比, execFile不用启动独立的shell,更加轻量级
var execFile = require('child_process').execFile;

execFile('/bin/ls', ['-lh', '.'], function (error, stdout, stderr) {
console.log(stdout);
})

fork

  • 只能运行js或可编译到js的语言
var fork = require('child_process').fork;
var cpus = require('os').cpus(); for (var i = 0; i < cpus.length; i++) {
fork('./work.js')
}
  • 子进程运行完成时并不会自动退出,您需要明确地调用 process.exit()
  • 这些子进程是全新的V8实例,假设每个新的Node需要至少 30 毫秒的启动时间和10MB内存,就是说不能创建成百上千个这样的实例
  • 进程间通信,fork会在主进程和子进程之间直接建立一个IPC管道
//main.js
var fork = require('child_process').fork;
var n = fork('./work.js'); n.on('message', function (m) {
console.log(m);
}) n.send({main: 'sub'}) //work.js
process.on('message', function (m) {
console.log(m);
process.exit()
}) process.send({sub: 'main'})

os

var os = require('os')

os.type();  //操作系统类型
os.platform(); //操作系统平台
os.hostname(); //系统主机名
os.cpus(); //系统内核信息
os.arch(); //系统架构 如x64
os.release(); //系统发行版本
os.uptime(); //系统运行时间
os.totalmem(); //系统内存总量 type
os.freemem(); //系统内存空闲 type
os.tmpdir(); //系统默认临时文件目录: 用户系统中每个操作都会被保存成临时文件放在这
os.networkInterfaces(); //网络接口信息

nodejs复习02的更多相关文章

  1. nodejs复习01

    console 格式化 console.log("%s:%s", "a", "b") //字符串 console.log("%d. ...

  2. nodejs复习05

    stream 可读流 fs.pause()方法会使处于流动模式的流停止触发data事件,切换到非流动模式并让后续数据流在内部缓冲区 var fs = require('fs') var rs = fs ...

  3. nodejs复习04

    TCP/UDP网络应用 创建TCP服务器客户端 socket套接字对象实例,是对TCP协议的一个基本封装接口 clientt套接字对象实例 //server.js var net = require( ...

  4. nodejs复习03

    文件系统fs 重命名 fs.rename() fs.renameSync 优先选择异步,可以进行异常判断 打开关闭文件 fd = fs.openSync(file, flags) fs.closeSy ...

  5. C#基础总复习02

    继续更新第二篇: 1:一元运算符:++ -- ++:不管是前加加还是后加加,变量的值最终都会自身加一. 前加加和后加加的区别体现在参与运算的时候,如果是后加加,则首先拿原值参与运算, 运算完成后再自身 ...

  6. NIO复习02

    Selector 1. Selector(选择器)是Java NIO中能够检测一到多个NIO通道,并能够知晓通道是否为诸如读写事件做好准备的组件.这样,一个单独的线程可以管理多个channel,从而管 ...

  7. 防火墙和SELinux复习02

    1.防火墙 防火墙主要起隔离作用,严格的过滤入站,允许出站.又分为硬件防火墙和软件防火墙,硬件防火墙主要保护一群机器,而软件防火墙主要保护本机. 防火墙相关命令:systemctl status fi ...

  8. java数据结构复习02

    1.递归问题 1.1汉诺塔问题(递归) 问题描述三个柱子,起初有若干个按大小关系顺序安放的盘子,需要全部移动到另外一个柱子上.移动规则:在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘.移动 ...

  9. nodeJs学习-02 fs模块(文件操作)

    读文件: const fs = require('fs'); //读文件(异步) readFile(文件名,回调函数) fs.readFile('section03/testData/aaa.txt' ...

随机推荐

  1. hdu2005第几天?

    Problem Description 给定一个日期,输出这个日期是该年的第几天.   Input 输入数据有多组,每组占一行,数据格式为YYYY/MM/DD组成,具体参见sample input , ...

  2. [Algorithm] 局部敏感哈希算法(Locality Sensitive Hashing)

    局部敏感哈希(Locality Sensitive Hashing,LSH)算法是我在前一段时间找工作时接触到的一种衡量文本相似度的算法.局部敏感哈希是近似最近邻搜索算法中最流行的一种,它有坚实的理论 ...

  3. java 初始化顺序

    java 变量类型如下: 实例变量: 类变量: 初始化途经如下: 实例变量 --声明时,初始化: --非静态初始化块内,初始化: --构造函数内,初始化: 实例1: public class bean ...

  4. MyBatis中关于别名typeAliases的设置

    第一种:通过在配置文件中typeAlias节点设置type的方式 <?xml version="1.0" encoding="UTF-8" ?> & ...

  5. 移动端web开发的一些知识点

    整理一下自己平时移动端web开发中遇到的问题,也参考一下前辈的一些总结 1.最常见的要数1像素边框了 因为Retine屏的分辨率始终是普通屏幕的2倍,1px的边框在dpr=2的retina屏下会显示成 ...

  6. Socket网络编程二

    SocketServer socketserver一共有这么几种类型 class socketserver.TCPServer(server_address, RequestHandlerClass, ...

  7. Node.js配合node-http-proxy解决本地开发ajax跨域问题

    情景: 前后端分离,本地前端开发调用接口会有跨域问题,一般有以下3种解决方法: 1. 后端接口打包到本地运行(缺点:每次后端更新都要去测试服下一个更新包,还要在本地搭建java运行环境,麻烦) 2. ...

  8. (二)Netty源码学习笔记之服务端启动

    尊重原创,转载注明出处,原文地址:http://www.cnblogs.com/cishengchongyan/p/6129971.html  本文将不会对netty中每个点分类讲解,而是一个服务端启 ...

  9. Windows+Caffe+VS2013+python接口配置过程

    前段时间在笔记本上配置了Caffe框架,中间过程曲曲折折,但由于懒没有将详细过程总结下来,这两天又在一台配置较高的台式机上配置了Caffe,配置时便非常后悔当初没有写到博客中去,现已配置好Caffe, ...

  10. SQL 表连接查询出现重复列,由此理清LEFT JOIN、INNER JOIN的区别

    1.先创建两个临时表,并插入数据 CREATE TABLE #TEMP1( ID INT IDENTITY(1,1) PRIMARY KEY, name NVARCHAR(50)) CREATE TA ...