三木社区

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 270|回复: 0
打印 上一主题 下一主题

options.detached

[复制链接]

1562

主题

1564

帖子

4904

积分

博士

Rank: 8Rank: 8

积分
4904
跳转到指定楼层
楼主
发表于 2017-8-8 08:27:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
如果设置了 detached 选项, 子进程将会被作为新进程组的leader,这使得子进程可以在父进程退出后继续运行。
缺省情况下父进程会等 detached 的子进程退出。要阻止父进程等待一个这样的子进程,调用 child.unref() 方法,则父进程的事件循环引用计数中将不会包含这个子进程。
detaching 一个长期运行的进程,并重新将输出指向文件:
  1. var fs = require('fs'),
  2.      spawn = require('child_process').spawn,
  3.      out = fs.openSync('./out.log', 'a'),
  4.      err = fs.openSync('./out.log', 'a');

  5. var child = spawn('prg', [], {
  6.    detached: true,
  7.    stdio: [ 'ignore', out, err ]
  8. });

  9. 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 里执行命令,并缓冲输出。
  1. var exec = require('child_process').exec,
  2.     child;

  3. child = exec('cat *.js bad_file | wc -l',
  4.   function (error, stdout, stderr) {
  5.     console.log('stdout: ' + stdout);
  6.     console.log('stderr: ' + stderr);
  7.     if (error !== null) {
  8.       console.log('exec error: ' + error);
  9.     }
  10. });
复制代码
回调参数是 (error, stdout, stderr)。 如果成功 , error值为 null。 如果失败, error 变为 Error 的实例, error.code等于子进程退出码, 并且 error.signal 会被设置为结束进程的信号名。
第二个参数可以设置一些选项。 缺省是:
  1. { encoding: 'utf8',
  2.   timeout: 0,
  3.   maxBuffer: 200*1024,
  4.   killSignal: 'SIGTERM',
  5.   cwd: null,
  6.   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 精简些,参数相同.


回复

使用道具 举报

Archiver|手机版|小黑屋|三木电子社区 ( 辽ICP备11000133号-4 )

辽公网安备 21021702000620号

GMT+8, 2025-6-27 00:30 , Processed in 0.024627 second(s), 23 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表