Timers 计时器

    设置延时delay 毫秒之后执行回调函数(callback)。该函数返回timeoutId,可以使用clearTimeout()清除定时。你
    也可以传递额外的参数给回调函数。

    clearTimeout(timeoutId)

    清除指定的定时。

    setInterval(callback, delay, [arg], […])

    设置重复延时调用callback。该函数返回intervalId,可以使用clearTimeout()清除定时。你也可以传递可选的
    参数给回调函数。

    .end();
    clearInterval(intervalId)

    清楚指定的重复延时回调。

    node 通过ChildProcess 类提供全面的popen(3)功能。
    程序可以通过子进程的标准输入(stdin)、标准输出(stdout)、标准错误输出(stderr)以完全非阻塞的形式传递数据。

    你可以使用require(‘child_process’).spawn()创建子进程。
    每个子进程总是带有三个流对象:child.stdin, child.stdout 和child.stderr。
    每个ChildProcess 类也是一个事件触发器。

    Event: ‘exit’

    child.stdin

    可写流(Writable Stream),代表子进程的标准输入(stdin)。使用end()函数关闭此流(stream),通常会终止子进程。

    child.stdout

    只读流(Readable Stream),代表子进程的标准输出(stdout)。
    child.stderr

    只读流(Readable Stream),代表子进程的标准错误输出(stderr)。

    child.pid

    子进程的PID
    Example:

    1. grep = spawn('grep', ['ssh']);
    2. console.log('Spawned child pid: ' + grep.pid);
    3. grep.stdin.end();

    child_process.spawn(command, args=[], [options])

    使用指定的命令行参数创建新线程。如果不指定参数,args 默认为空数组。
    第三个参数用于指定一些额外的选项,默认值如下:

    1. { cwd: undefined
    2. , env: process.env,
    3. , customFds: [-1, -1, -1]
    4. }

    cwd 可以用于指定新进程的工作目录,env 指定新进程可见的环境变量,而customFds 则可以将新进程的
    [stdin,stdout,stderr]绑定到指定的流,-1指创建新的流。

    例子: 实现’ps ax | grep ssh’命令。

    1. var sys = require('sys'),
    2. spawn = require('child_process').spawn,
    3. ps = spawn('ps', ['ax']),
    4. grep = spawn('grep', ['ssh']);
    5. ps.stdout.on('data', function (data) {
    6. grep.stdin.write(data);
    7. });
    8. ps.stderr.on('data', function (data) {
    9. sys.print('ps stderr: ' + data);
    10. if (code !== 0) {
    11. console.log('ps process exited with code ' + code);
    12. }
    13. grep.stdin.end();
    14. });
    15. grep.stdout.on('data', function (data) {
    16. sys.print(data);
    17. });
    18. grep.stderr.on('data', function (data) {
    19. sys.print('grep stderr: ' + data);
    20. });
    21. grep.on('exit', function (code) {
    22. if (code !== 0) {
    23. console.log('grep process exited with code ' + code);
    24. }
    25. });

    例子,检测退出代码:

    1. var spawn = require('child_process').spawn,
    2. child.stderr.on('data', function (data) {
    3. if (/^execvp\(\)/.test(data.asciiSlice(0,data.length))) {
    4. console.log('Failed to start child process.');
    5. }
    6. });

    请参见:child_process.exec()

    child_process.exec(command, [options], callback)

    使用子进程执行命令,缓存子进程的输出,并将子进程的输出以回调函数参数的形式返回。

    回调函数得到的参数分别为(error, stdout, stderr)。成功时error 参数是null;失败时error 参数是Error 的实例。
    error.code 是子进程的返回值,error.signal 保存终止进程的信号。
    exec 函数的第二个可选参数可以用来指定一些选项。默认值为

    1. { encoding: 'utf8'
    2. , timeout: 0
    3. , maxBuffer: 200*1024
    4. , killSignal: 'SIGKILL'
    5. , cwd: null
    6. , env: null
    7. }

    如果timeout 为大于0的值,node 将终止运行时间超过timeout(单位为毫秒)的子进程。子进程将被终止信号
    (killSignal,默认值为’SIGKILL’)终止。maxBuffer 指定stdout 和stderr 最大可缓存数据的大小,如果超过这个值
    子进程将被终止。

    child.kill(signal=’SIGTERM’)

    向子进程发送信号。如果不指定参数,默认发送’SIGTERM’信号。所有可用信号列表请参考signal(7)。

    1. var spawn = require('child_process').spawn,
    2. grep = spawn('grep', ['ssh']);
    3. grep.on('exit', function (code, signal) {
    4. console.log('child process terminated due to receipt of signal '+signal);
    5. });

    注意,虽然此函数名为kill,但发送的信号不一定终止子进程。kill 实际上只会向进程发送信号。
    See kill(2)
    更多信息请参考kill(2)