06 全局-process

2018-10-04  本文已影响0人  Frewen

全局:进程

获取平台信息
#!/usr/bin/node

const log = console.log;

/*向控制台打印 CPU 架构信息以及操作系统版本信息*/
log("arch: ",process.arch);
log("platform: ",process.platform);

## 输出结果
arch:  x64
platform:  linux

/*打印进程 id 信息以及 Node.js 可执行文件的绝对路径信息*/
log("id: ",process.pid);
log("execPath: ",process.execPath);

## 输出结果
id:  2569
execPath:  /usr/bin/node

/*在脚本中让程序暂停执行*/
process.stdin.pause();

/*打印 Node.js 版本信息,当前登录用户 id 信息,当前登录用户所属组 id 信息以及当前脚本
所在路径信息*/

log("version: ",process.version);
log("uid: ",process.getuid());
log("gid: ",process.getgid());
log("pwd: ",process.cwd());

## 输出结果
version:  v6.10.1
uid:  1000
gid:  1000
pwd:  /home/wangding/node.js/nodejs-demo/04-process

/*打印内存使用情况*/
log("rss: ",process.memoryUsage().rss);// 查看系统的常驻内存大小
log("heapTotal: ",process.memoryUsage().heapTotal);//查看 V8 动态分配的总内存大小
log("heapUsed: ",process.memoryUsage().heapUsed);//查看 v8 动态分配的已用内存大小
log("external: ",process.memoryUsage().external);
//查看 v8 管理的绑定到 JS 对象上的 C++ 对象的内存

## 输出结果
rss:  14946304
heapTotal:  7376896
heapUsed:  3498472
external:  8380
/*打印环境变量*/
log("env: ",process.env);
获取命令行参数
#!/usr/bin/node
// argv 是一个字符串数组 头两个字符串 第一个字符串是node 第二个参数是运行的脚本的绝对路径
/*
console.log(process.argv.length);

for(var i = 0;i<process.argv.length;i++){
  console.log(`${i}:argv - ${process.argv[i]}`);
}
*/

if(process.argv.length === 2 || process.argv[2] == "--help" || process.argv[2] == "-h"){
  console.log("usage: cmd-name [OPTION] [expression]\nevaluate the expression.\n\nMandatory arguments to long options are mandatory for short options too.\n-h, --help output help information and exit"
      )} else{
  console.log(process.argv[2] + "=" + eval(process.argv[2]));        
}

# 输出格式
./02-calc.js
usage: cmd-name [OPTION] [expression]
evaluate the expression.

Mandatory arguments to long options are mandatory for short options too.
-h, --help output help information and exit

./02-calc.js 2+4
2+4=6

./02-calc.js 2\*Math.PI
2*Math.PI=6.283185307179586
处理退出码

退出码实质上是给程序看的,在Linux程序中,有时候子进程会输出退出码,父进程通过查看子进程输出的退出码来判断是否正确

#!/usr/bin/node

var code = process.argv[2];
if(typeof code === 'number'){
  console.log("命令行参数类型不符合!");
  process.exit(1);
}
if(process.argv.length <3){
  console.error("请给出命令行参数!");
  process.exit(1);
}
process.exit(code);

// process.exit(code:number) ?表示可以有也可以表示没有
// 获取退出码 echo $?
操作标准输入输出流
#!/usr/bin/node

const msg = ['name','email','qq','mobile'];

var i = 0,
  me = {};
console.log(msg[i] + ':');
process.stdin.on('data',(data)=>{
  me[msg[i]] = data.slice(0,data.length-1).toString('utf-8');// slice 是将回车进行去掉
  i++;
  if(i == msg.length){
    console.log(me);
    process.exit();
  }
  console.log(msg[i] + ':');
});
process.stdin.on('end',()=>{
  console.log(me);
});
处理信号量
#!/usr/bin/node

process.stdin.resume();

process.on('SIGINT',()=>{
  console.log('you have pressed Ctrl+C');
  process.exit();
})

process.on('SIGTSTP',()=>{
  console.log('you have pressed Ctrl+Z');
})
// 杀掉程序的两种方式
/*
第一种: 通过 Ctrl+C 和 Ctrl+Z
第二种: 通过kill -2 pid 和 kill -20 pid
*/
实现 my-kill 程序
#!/usr/bin/node

const pid = process.argv[2];
const sig = process.argv[3];

process.kill(pid,sig);
上一篇 下一篇

猜你喜欢

热点阅读