如果设置了 detached 选项, 子进程将会被作为新进程组的leader,这使得子进程可以在父进程退出后继续运行。 缺省情况下父进程会等 detached 的子进程退出。要阻止父进程等待一个这样的子进程,调用 child.unref() 方法,则父进程的事件循环引用计数中将不会包含这个子进程。 detaching 一个长期运行的进程,并重新将输出指向文件: - var fs = require('fs'),
- spawn = require('child_process').spawn,
- out = fs.openSync('./out.log', 'a'),
- err = fs.openSync('./out.log', 'a');
- var child = spawn('prg', [], {
- detached: true,
- stdio: [ 'ignore', out, err ]
- });
- child.unref();
复制代码使用 detached 选项来启动一个长时间运行的进程时,进程不会在后台保持运行,除非他提供了一个不连接到父进程的stdio 。如果继承了父进程的stdio,则子进程会继续控制终端。 options.customFds已废弃, customFds 允许指定特定文件描述符作为子进程的 stdio。该 API 无法移植到所有平台,因此被废弃。使用 customFds 可以将新进程的 [stdin, stdout, stderr] 钩到已有流上;-1 表示创建新流。自己承担使用风险。 参见: child_process.exec() and child_process.fork() child_process.exec(command[, options], callback)- command {String} 要执行的命令,空格分割
- options {Object}
- cwd {String} 子进程的当前工作目录
- env {Object} 环境变量
- encoding {String} (默认: 'utf8')
- shell {String} 运行命令的 shell(默认: '/bin/sh' UNIX, 'cmd.exe' Windows, 该 shell 必须接收 UNIX上的 -c 开关 ,或者 Windows上的/s /c 开关 。Windows 上,命令解析必须兼容 cmd.exe。)
- timeout {Number} (默认: 0)
- maxBuffer {Number} (默认: 200*1024)
- killSignal {String} (默认: 'SIGTERM')
- uid {Number} 设置进程里的用户标识。 (见 setuid(2)。)
- gid {Number} 设置进程里的群组标识。(见 setgid(2)。)
- callback {Function} 进程终止的时候调用
- error {Error}
- stdout {Buffer}
- stderr {Buffer}
- 返回: ChildProcess 对象
在 shell 里执行命令,并缓冲输出。 - var exec = require('child_process').exec,
- child;
- child = exec('cat *.js bad_file | wc -l',
- function (error, stdout, stderr) {
- console.log('stdout: ' + stdout);
- console.log('stderr: ' + stderr);
- if (error !== null) {
- console.log('exec error: ' + error);
- }
- });
复制代码回调参数是 (error, stdout, stderr)。 如果成功 , error值为 null。 如果失败, error 变为 Error 的实例, error.code等于子进程退出码, 并且 error.signal 会被设置为结束进程的信号名。 第二个参数可以设置一些选项。 缺省是: - { encoding: 'utf8',
- timeout: 0,
- maxBuffer: 200*1024,
- killSignal: 'SIGTERM',
- cwd: null,
- env: null }
复制代码如果 timeout 大于 0, 子进程运行时间超过 timeout 时会被终止。 killSignal (默认: 'SIGTERM') 能杀死子进程。 maxBuffer 设定了 stdout 或 stderr 的最大数据量,如果子进程的数量量超过了,将会被杀死。 (file[, args][, options][, callback])- file {String} 要运行的程序的文件名
- args {Array} 参数列表
- options {Object}
- cwd {String} 子进程的工作目录
- env {Object} 环境
- encoding {String} (默认: 'utf8')
- timeout {Number} (默认: 0)
- maxBuffer {Number} (默认: 200*1024)
- killSignal {String} (默认: 'SIGTERM')
- uid {Number} 设置进程里的用户标识。 (见 setuid(2)。)
- gid {Number} 设置进程里的群组标识。(见 setgid(2)。)
- callback {Function} 进程终止的时候调用
- error {Error}
- stdout {Buffer}
- stderr {Buffer}
- 返回: ChildProcess 对象
和 child_process.exec() 类似,不同之处在于这是执行一个指定的文件,因此它比child_process.exec 精简些,参数相同.
|