nodejs复习02
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
数据;如果exec
的buffer
体积设置得不够大,会错误失败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的更多相关文章
- nodejs复习01
console 格式化 console.log("%s:%s", "a", "b") //字符串 console.log("%d. ...
- nodejs复习05
stream 可读流 fs.pause()方法会使处于流动模式的流停止触发data事件,切换到非流动模式并让后续数据流在内部缓冲区 var fs = require('fs') var rs = fs ...
- nodejs复习04
TCP/UDP网络应用 创建TCP服务器客户端 socket套接字对象实例,是对TCP协议的一个基本封装接口 clientt套接字对象实例 //server.js var net = require( ...
- nodejs复习03
文件系统fs 重命名 fs.rename() fs.renameSync 优先选择异步,可以进行异常判断 打开关闭文件 fd = fs.openSync(file, flags) fs.closeSy ...
- C#基础总复习02
继续更新第二篇: 1:一元运算符:++ -- ++:不管是前加加还是后加加,变量的值最终都会自身加一. 前加加和后加加的区别体现在参与运算的时候,如果是后加加,则首先拿原值参与运算, 运算完成后再自身 ...
- NIO复习02
Selector 1. Selector(选择器)是Java NIO中能够检测一到多个NIO通道,并能够知晓通道是否为诸如读写事件做好准备的组件.这样,一个单独的线程可以管理多个channel,从而管 ...
- 防火墙和SELinux复习02
1.防火墙 防火墙主要起隔离作用,严格的过滤入站,允许出站.又分为硬件防火墙和软件防火墙,硬件防火墙主要保护一群机器,而软件防火墙主要保护本机. 防火墙相关命令:systemctl status fi ...
- java数据结构复习02
1.递归问题 1.1汉诺塔问题(递归) 问题描述三个柱子,起初有若干个按大小关系顺序安放的盘子,需要全部移动到另外一个柱子上.移动规则:在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘.移动 ...
- nodeJs学习-02 fs模块(文件操作)
读文件: const fs = require('fs'); //读文件(异步) readFile(文件名,回调函数) fs.readFile('section03/testData/aaa.txt' ...
随机推荐
- NFS
测试版本:CentOS 6.4 64b NFS监听2049(TCP/UDP)端口,但由于文件系统非常复杂,不同的功能都会使用不同的程序来启动,因此额外端口就会不固定(随机1024以下的),这就需要向远 ...
- Linux htop工具使用详解
一.Htop的使用简介 大家可能对top监控软件比较熟悉,今天我为大家介绍另外一个监控软件Htop,姑且称之为top的增强版,相比top其有着很多自身的优势.如下: 两者相比起来,top比较繁琐 默认 ...
- 浅谈C++之冒泡排序、希尔排序、快速排序、插入排序、堆排序、基数排序性能对比分析之后续补充说明(有图有真相)
如果你觉得我的有些话有点唐突,你不理解可以想看看前一篇<C++之冒泡排序.希尔排序.快速排序.插入排序.堆排序.基数排序性能对比分析>. 这几天闲着没事就写了一篇<C++之冒泡排序. ...
- file xxx from install of xxx conflicts with file from xxx
执行安装 rpm -ivh lib64stdc++6-4.6.1-2-mdv2011.0.x86_64.rpm 时提示以下错误: warning: lib64stdc++6-4.6.1-2-mdv20 ...
- CSS实现可变行数垂直居中
<html> <head> <style> .vcenter { position: relative; height: 100%; width:50px; } . ...
- 请不要重复犯我在学习Python和Linux系统上的错误
本人已经在运维行业工作了将近十年,我最早接触Linux是在大二的样子,那时候只追求易懂,所以就选择了Ubuntu作为学习.使用的对象,它简单.易用.好操作.界面绚丽,对于想接触Linux的新手来说是非 ...
- TJpgDec—轻量级JPEG解码器
TJpgDec-轻量级JPEG解码器 本文由乌合之众lym瞎编,欢迎转载blog.cnblogs.net/oloroso 下文中解码一词皆由decompression/decompress翻译而来. ...
- Python-第三方库requests详解
Requests 是用Python语言编写,基于 urllib,采用 Apache2 Licensed 开源协议的 HTTP 库.它比 urllib 更加方便,可以节约我们大量的工作,完全满足 HTT ...
- 【安装Redis】CentOS7 下安装NodeJs+Express+MongoDB+Redis
Redis,V3.2,官网l官方链接:http://www.redis.io/download,参考:http://blog.csdn.net/mlks_2008/article/details/19 ...
- Oracle基础知识(一)、简介与安装
文章提纲 Oracle简介与发展历程 安装实例(面向普通开发者) 一.Oracle简介与发展历程 中文名称甲骨文公司,全称为甲骨文股份有限公司(甲骨文软件系统有限公司).甲骨文已超越 IBM ,成为继 ...