- 浏览: 96754 次
- 性别:
- 来自: 临沂
文章分类
- 全部博客 (125)
- spring (2)
- java (6)
- jquery (0)
- android (0)
- window (1)
- 数据库 (0)
- 项目管理 (1)
- maven (0)
- english (0)
- ext (0)
- javascript and html (2)
- hibernate (1)
- p6spy (0)
- shiro (0)
- fusionchart (0)
- FileUtils (0)
- struts2 (0)
- ireport (0)
- webservice (0)
- stripes (0)
- jsp (1)
- it综合 (1)
- linux (1)
- 工作流 (0)
- activiti (0)
- poi (0)
- nosql (0)
- mongodb (0)
- lucene (0)
- nodejs (10)
- eclipse (2)
- objective-c (1)
最新评论
本文是对nodejs0.8.9版本的api开发手册解读.nodejs网址
进程(process)
process对象是一个全局对象,它可以在任何地方被访问.它是一个EventEmitter对象的实例.
Event:'exit'
当一个进程即将退出时放出'exit'事件,这一个用来定时检查模块的状态的好钩子(hook)(例如单元测试),当主事件循环在执行完'exit'的回调函数后将不再执行,所以在exit事件中定义的定时器可能不会被加入事件列表.
监听'exit'事件的例子:
process.on('exit', function () {
process.nextTick(function () {
console.log('This will not run');
});
console.log('About to exit.');
});
Event:'uncaughtException'
当一个异常冒泡循环一圈又回到node事件循环时放出'uncaughtException'.如果这个异常被添加了一个监听器,默认操作(打印堆栈信息并退出)将不会执行.
监听'uncaughtException'事件的例子:
process.on('uncaughtException', function (err) {
console.log('Caught exception: ' + err);
});
setTimeout(function () {
console.log('This will still run.');
}, 500);
// Intentionally cause an exception, but don't catch it.
nonexistentFunc();
console.log('This will not run.');
注意:uncaughtException是一个很低级的异常处理,在将来可能被移除.
不要使用它,用domains代替(后面会讲),如果你非用不可,只好每次在程序发生异常之后重启.
不要把它和'On Error Resume Next'一起用,因为一个未处理的异常意味着你的程序--甚至是node.js自己--在一个未定义的状态.盲目的恢复继续执行疑问这任何事都可能发生.
想像一下,在你正在升级你的系统的时候拉扯主机电源线,十有八九可能什么都不会发生--但是第十次,你的系统会瘫痪.
你已经被警告过了.
信号事件(signal Events)
当进程接受到一个信号时发出'singal'事件.可以使用sigaction(2)(linux系统下)查看标准的posix 信号命名列表,例如:SIGINT,SIGUSR1,等等.
监听'signal'事件的例子:
// Start reading from stdin so we don't exit.
process.stdin.resume();
process.on('SIGINT', function () {
console.log('Got SIGINT. Press Control-D to exit.');
});
一个简单的方式发送SIGINT信号的方法是:control-c,在大多是终端程序里.
process.stdout
一个可以写道stdout的流
例子:console.log的定义:
console.log = function (d) {
process.stdout.write(d + '\n');
};
process.stderr和process.stdout在node中是和其他流不一样在往这些流里写东西时是阻塞的.这些阻塞的流需要索引常规文件或者tty文件描述.而process.stderr和process.stdout是索引管道,他们不像其他流一样阻塞.
process.stdin
标准输入流是一个可读的流,stdin流默认是暂停状态,所以想要从stdin读取必须要调用一次process.stdin.resume();
打开stdin和监听两个事件的例子:
process.stdin.resume();
process.stdin.setEncoding('utf8');
process.stdin.on('data', function (chunk) {
process.stdout.write('data: ' + chunk);
});
process.stdin.on('end', function () {
process.stdout.write('end');
});
process.argv
一个包含命令行参数的数组.第一个元素将会是"node",第二个参数将会是一个javascript文件的名字,后面的元素将会是一些附加的命令行参数.
// print process.argv
process.argv.forEach(function (val, index, array) {
console.log(index + ': ' + val);
});
这将会产生:
$ node process-2.js one two=three four
0: node
1: /Users/mjr/work/node/process-2.js
2: one
3: two=three
4: four
process.execPath
这是启动进程的可执行程序的绝对路径.
例子:
/usr/local/bin/node
process.abort()
这将引起node发出一个abort事件,将会引起node退出并生成一个核心文件.
process.chdir(directory)
改变当前进程的工作目录,如果失败会放出一个异常.
console.log('Starting directory: ' + process.cwd());
try {
process.chdir('/tmp');
console.log('New directory: ' + process.cwd());
}
catch (err) {
console.log('chdir: ' + err);
}
process.cwd()
返回当前进程的工作目录.
console.log('Current directory: ' + process.cwd());
process.env
一个包含了用户的环境变量的对象,可以用eviron(7)查看详细(Linux下)
process.exit([code])
用指定的code结束进程,如果省略了code,就会使用'success'code 0.
用'failure'代码退出:
process.exit(1);
在shell下可以看见node的退出代码1(我在window下没看见).
process.getgid()
注意:这个函数支持posix平台,不支持windows平台.
获得进程的组id,(getgid(2)查看详细),这是一个数组组id,不是组名称.
if (process.getgid) {
console.log('Current gid: ' + process.getgid());
}
process.setgid()
注意:这个函数支持posix平台,不支持windows平台.
设置进程的组id,可以接受一个数字id或者一个组名称字符串.如果一个组名称被指定,这个方法在通过给定的组名称解析出数字id之前是阻塞的.
if (process.getgid && process.setgid) {
console.log('Current gid: ' + process.getgid());
try {
process.setgid(501);
console.log('New gid: ' + process.getgid());
}
catch (err) {
console.log('Failed to set gid: ' + err);
}
}
process.getuid()
注意:这个函数支持posix平台,不支持windows平台.
获得线程的用户id,这是一个数字id,不是一个用户名.
if (process.getuid) {
console.log('Current uid: ' + process.getuid());
}
process.setuid()
注意:这个函数支持posix平台,不支持windows平台.
设置线程的用户id,可以接受一个数字id或者一个组名称字符串.如果一个组名称被指定,这个方法在通过给定的组名称解析出数字id之前是阻塞的.
if (process.getuid && process.setuid) {
console.log('Current uid: ' + process.getuid());
try {
process.setuid(501);
console.log('New uid: ' + process.getuid());
}
catch (err) {
console.log('Failed to set uid: ' + err);
}
}
process.version
一个内编译的属性,把NODE_VERSION属性暴漏了出来.
console.log('Version: ' + process.version);
process.versions
这个属性曝露出了node和node的依赖库的版本.
console.log(process.versions);
将会输出:
{ node: '0.4.12', v8: '3.1.8.26', ares: '1.7.4', ev: '4.4', openssl: '1.0.0e-fips' }
process.config
这个对象代表了我们用来编译当前node的可执行程序的配置信息的javascript描述.这和我们运行./configure时生成的'config.gypi'一样.
一个输出的例子大概是:
{ target_defaults:
{ cflags: [],
default_configuration: 'Release',
defines: [],
include_dirs: [],
libraries: [] },
variables:
{ host_arch: 'x64',
node_install_npm: 'true',
node_install_waf: 'true',
node_prefix: '',
node_shared_v8: 'false',
node_shared_zlib: 'false',
node_use_dtrace: 'false',
node_use_openssl: 'true',
node_shared_openssl: 'false',
strict_aliasing: 'true',
target_arch: 'x64',
v8_use_snapshot: 'true' } }
process.kill(pid,[signal])
发送一个信号到进程.pid是进程id,参数signal是要发送信号的一个字符串描述.信号的命名看起来像:'SIGINT'or'SIGINT1'.如果省略signal参数,将默认是:'SIGTERM',可以用kill(2)查看更多信息.
注意,正因为名字是process.kill,它确实只是一个信号发送器.就像系统调用call一样.发送的信号,可能除了杀死进程外还要做其他一些事情.
给自己发送一个进程的例子:
process.on('SIGHUP', function () {
console.log('Got SIGHUP signal.');
});
setTimeout(function () {
console.log('Exiting.');
process.exit(0);
}, 100);
process.kill(process.pid, 'SIGHUP');
process.pid
进程的pid属性.
console.log('This process is pid ' + process.pid);
process.title
设置或者获取在使用ps命令时显示的名称.
process.arch
你正在使用的处理器类型,例如:'arm','ia32'or'x64'.
console.log('This processor architecture is ' + process.arch);
process.platform
你正在使用的平台,例如:'darwin','freebsd','linux','solaris'or'win32'.
console.log('This platform is ' + process.platform);
process.memoryUsage()
返回一个node通过bytes测试的内存用法的表述的对象.
var util = require('util');
console.log(util.inspect(process.memoryUsage()));
例如:
{ rss: 4935680, heapTotal: 1826816, heapUsed: 650472 }
process.nextTick(callback)
在事件循环的下次循环中执行callback.这不是一个简单的setTimeout(fn,0)的别名.它的效率要高很多.
process.nextTick(function () {
console.log('nextTick callback');
});
process.umask([mask])
设置或者读取线程的文件模式创建掩码(屏蔽字).子进程从父进程继承掩码.如果是设置操作,将返回原先的mask,如果是读取,返回当前的mask.
var oldmask, newmask = 0644;
oldmask = process.umask(newmask);
console.log('Changed umask from: ' + oldmask.toString(8) +
' to ' + newmask.toString(8));
process.uptime()
返回一个数字,代表当前node已经运行的时间.
process.hrtime()
返回一个[秒,纳秒]形式的数组,代表了当前实时最高分标率.返回结果和过去的时间有关,和天数没有关系,因此没有对象记录偏移量.最初用于测量interval之间的效果.
你可以传入上次process.hrtime()返回的结果到process.hertime()中,得到一个不一样的结果.用来测量基准点和interval很有用.
var t = process.hrtime();
// [ 1800216, 927643717 ]
setTimeout(function () {
t = process.hrtime(t);
// [ 1, 6962306 ]
console.log('benchmark took %d seconds and %d nanoseconds', t[0], t[1]);
// benchmark took 1 seconds and 6962306 nanoseconds
}, 1000);
发表评论
-
一起读nodejs(八)----域(domain)
2012-09-19 09:13 858本文是对nodejs0.8.9版本的api开发手册解读.n ... -
一起读nodejs(九)----缓存类(Buffer)
2012-09-21 09:20 3346本文是对nodejs0.8.9版本的api开发手 ... -
一起读nodejs(一)----概览和全局对象(Synopsis &Global Objects)
2012-09-03 09:02 744本文是对nodejs0.8.9版本的api开发手册解读.nod ... -
一起读nodejs(二)----控制台和定时器(console &Timer)
2012-09-06 09:30 916本文是对nodejs0.8.9版本的api开发手册解读.nod ... -
一起读nodejs(三)----模块(Modules)
2012-09-07 08:37 1151本文是对nodejs0.8.9版本的api开发手册解读.n ... -
一起读nodejs(四)----插件(addons)
2012-09-10 08:58 2161本文是对nodejs0.8.9版本的api开发手册解读 ... -
nodejs version 0.8.9稳定版更新日志
2012-09-12 09:46 12002012.09.11,0.8.9版本(稳定版) ... -
一起读nodejs(六)----工具类(Utilties)
2012-09-14 08:51 2646本文是对nodejs0.8.9版 ... -
一起读nodejs(七)----事件(Events)
2012-09-17 08:46 1114本文是对nodejs0.8.9版本的api开发手册解读.n ...
相关推荐
Process-watcher 能够启动和控制 NodeJS 进程的工具。代码示例:var watcher = require('process-watcher'); /* * Dummy metric monitoring object. */ var watcher_metric = { /** * ...
例如,我们常见的`process`对象就是`global`的一个属性,它提供了与Node.js进程交互的方法,如获取进程ID(`process.pid`),监听进程退出事件(`process.on('exit', callback)`)等。此外,Node.js中的`console`...
"nodejs-r-child-process"项目就是为了解决这个问题,它提供了在Node.js中通过子进程调用R的解决方案。 首先,我们需要理解Node.js中的子进程(Child Process)模块。这个模块允许我们在Node.js应用程序中创建和...
例如,`process` 对象就是一个全局对象,提供了与当前 Node.js 进程交互的方法和属性,如进程ID(`process.pid`)和退出代码(`process.exitCode`)。 **核心对象** Node.js 提供了一系列核心模块,它们是预编译好...
- **process**: 提供了与进程相关的功能。 - **console**: 用于输出日志信息。 - **Buffer**: 处理二进制数据。 - **require()**: 加载模块。 - **require.resolve()**: 解析模块路径。 - **require.cache**: 访问...
- **Child Process**:Node.js通过子进程模块处理多进程通信。 - **Cluster模块**:利用集群共享同一端口,平衡负载到多个工作进程。 8. **路由与中间件** - 在构建Web应用时,Node.js通常结合Express或Koa等...
- **主进程与工作进程**:介绍 Node.js 中的主进程和工作进程,以及使用 child_process 模块进行进程间通信。 - **Cluster 模块**:利用集群模块实现多核 CPU 利用,提高服务性能。 6. **错误处理** - **异常...
- **进程与线程管理**:使用`child_process`模块可以创建子进程,`cluster`模块则支持负载均衡。 3. **中间件与框架** - **Express**:最流行的Node.js Web应用框架,简化了路由、中间件和视图的处理。 - **Koa*...
node-process, node.js 和浏览器的进程信息 进程require('process'); 与其他模块一样。通过模块提供的browser.js shim 在 node.js 和浏览器中工作。浏览器实现这个 MODULE的目标并非是内置进程 MODULE的完全成熟的...
child_process模块是Node.js中用于创建子进程的核心模块,它提供了spawn()、exec()、execFile()和fork()四个方法。其中,spawn()方法启动一个新的进程来执行一个命令;exec()方法除了启动子进程外,还提供了回调函数...
在Node.js中,`process`模块是一个全局对象,它提供了与当前Node.js进程交互的各种功能。这个模块非常关键,因为它允许开发者获取系统信息、管理进程生命周期以及处理异常情况。以下是对`process`模块的一些详细说明...
`child_process.fork()`用于创建Node.js子进程,而`child_process.spawn()`则可以启动任意类型的进程,如Java或C。 **stream方式通信**: 在Node.js中,`spawn`创建的子进程默认不包含与父进程的通信管道。为了实现...
标题 "nodejs-ignite-challenge-code01" 暗示这是一个关于 Node.js 的编程挑战,可能是某个在线学习平台或编程竞赛的一部分。"Ignite" 通常指的是加速、启动或激发,因此这可能是一个引导初学者掌握 Node.js 开发...
7. **进程间通信(IPC)**:“Child Processes”练习则涉及如何使用`child_process`模块创建子进程,实现进程间的通信。 通过这些练习,你不仅能掌握Node.js的基本操作,还能了解其背后的异步编程模型,这对于开发...
工作进程间可以使用`process.send()`和`process.on('message')`进行通信。 八、监控与调试 为了确保Node.js进程的稳定运行,可以使用各种工具进行性能监控和调试。例如,`performance`模块提供了一组API用于测量...
8. **进程和线程**:Node.js主要运行在单线程中,但通过child_process模块可以创建子进程,实现多进程并行处理。 9. **Express框架**:尽管不是Node.js的标准API,但Express是最流行的Node.js Web应用框架,简化了...
在本项目"very-simple-nodejs-app-for-test"中,我们主要关注的是一个基本的Node.js应用程序,它设计用于测试目的。Node.js是一个基于Chrome V8引擎的JavaScript运行环境,允许开发者在服务器端使用JavaScript编写...
在操作系统中,进程(process)是资源分配的基本单位,每个进程都拥有自己独立的内存区域,其中存放着代码、运行状态以及变量等信息。而线程(thread)是进行运算调度的最小单位,它是依附于进程的,一个进程至少包含一...