Timers 计时器 通过sys访问模块 Script 脚本 Timers 计时器 setTimeout(callback, delay, [arg], [...]) 设置延时delay 毫秒之后执行回调函数(callback)。该函数返回timeoutId,可以使用clearTimeout()清除定时。你 也可以传递额外的参数给回调函数。 clearTimeout(timeoutId) 清除指定的定时。 setInterval(callback, delay, [arg], [...]) 设置重复延时调用callback。该函数返回intervalId,可以使用clearTimeout()清除定时。你也可以传递可选的 参数给回调函数。 clearInterval(intervalId) 清楚指定的重复延时回调。 Child Processes 子进程 node 通过ChildProcess 类提供全面的popen(3)功能。 程序可以通过子进程的标准输入(stdin)、标准输出(stdout)、标准错误输出(stderr)以完全非阻塞的形式传递数据。 你可以使用require('child_process').spawn()创建子进程。 每个子进程总是带有三个流对象:child.stdin, child.stdout 和child.stderr。 每个ChildProcess 类也是一个事件触发器。 Event: 'exit' function (code, signal) {} 此事件在子进程结束后被触发。如果进程正常结束,code 参数的值就是子进程退出后的返回值,否则此参数为 null。如果进程因为信号而终止,参数signal 就是信号的名称,否则此参数为null。 触发此事件之后,node 将不再触发'output'和'error'事件。 See waitpid(2). child.stdin 可写流(Writable Stream),代表子进程的标准输入(stdin)。使用end()函数关闭此流(stream),通常会终止子进程。 child.stdout 只读流(Readable Stream),代表子进程的标准输出(stdout)。 child.stderr 只读流(Readable Stream),代表子进程的标准错误输出(stderr)。 child.pid 子进程的PID Example: var spawn = require('child_process').spawn, grep = spawn('grep', ['ssh']); console.log('Spawned child pid: ' + grep.pid); grep.stdin.end(); child_process.spawn(command, args=[], [options]) 使用指定的命令行参数创建新线程。如果不指定参数,args 默认为空数组。 第三个参数用于指定一些额外的选项,默认值如下: { cwd: undefined , env: process.env, , customFds: [-1, -1, -1] } cwd 可以用于指定新进程的工作目录,env 指定新进程可见的环境变量,而customFds 则可以将新进程的 [stdin,stdout,stderr]绑定到指定的流,-1指创建新的流。 例子:执行命令'ls -lh /usr'并捕获标准输出、标准错误输出和退出代码(程序退出时,main 函数返回的代码)。 var sys = require('sys'), spawn = require('child_process').spawn, ls = spawn('ls', ['-lh', '/usr']); ls.stdout.on('data', function (data) { sys.print('stdout: ' + data); }); ls.stderr.on('data', function (data) { sys.print('stderr: ' + data); }); ls.on('exit', function (code) { console.log('child process exited with code ' + code); }); 例子: 实现'ps ax | grep ssh'命令。 var sys = require('sys'), spawn = require('child_process').spawn, ps = spawn('ps', ['ax']), grep = spawn('grep', ['ssh']); ps.stdout.on('data', function (data) { grep.stdin.write(data); }); ps.stderr.on('data', function (data) { sys.print('ps stderr: ' + data); }); ps.on('exit', function (code) { if (code !== 0) { console.log('ps process exited with code ' + code); } grep.stdin.end(); }); grep.stdout.on('data', function (data) { sys.print(data); }); grep.stderr.on('data', function (data) { sys.print('grep stderr: ' + data); }); grep.on('exit', function (code) { if (code !== 0) { console.log('grep process exited with code ' + code); } }); 例子,检测退出代码: var spawn = require('child_process').spawn, child = spawn('bad_command'); child.stderr.on('data', function (data) { if (/^execvp\(\)/.test(data.asciiSlice(0,data.length))) { console.log('Failed to start child process.'); } }); 请参见:child_process.exec() child_process.exec(command, [options], callback) 使用子进程执行命令,缓存子进程的输出,并将子进程的输出以回调函数参数的形式返回。 var sys = require('sys'), exec = require('child_process').exec, child; child = exec('cat *.js bad_file | wc -l', function (error, stdout, stderr) { sys.print('stdout: ' + stdout); sys.print('stderr: ' + stderr); if (error !== null) { console.log('exec error: ' + error); } }); 回调函数得到的参数分别为(error, stdout, stderr)。成功时error 参数是null;失败时error 参数是Error 的实例。 error.code 是子进程的返回值,error.signal 保存终止进程的信号。 exec 函数的第二个可选参数可以用来指定一些选项。默认值为 { encoding: 'utf8' , timeout: 0 , maxBuffer: 200*1024 , killSignal: 'SIGKILL' , cwd: null , env: null } 如果timeout 为大于0的值,node 将终止运行时间超过timeout(单位为毫秒)的子进程。子进程将被终止信号 (killSignal,默认值为'SIGKILL')终止。maxBuffer 指定stdout 和stderr 最大可缓存数据的大小,如果超过这个值 子进程将被终止。 child.kill(signal='SIGTERM') 向子进程发送信号。如果不指定参数,默认发送'SIGTERM'信号。所有可用信号列表请参考signal(7)。 var spawn = require('child_process').spawn, grep = spawn('grep', ['ssh']); grep.on('exit', function (code, signal) { console.log('child process terminated due to receipt of signal '+signal); }); // send SIGHUP to process grep.kill('SIGHUP'); 注意,虽然此函数名为kill,但发送的信号不一定终止子进程。kill 实际上只会向进程发送信号。 See kill(2) 更多信息请参考kill(2) 通过sys访问模块 Script 脚本