zoukankan      html  css  js  c++  java
  • cluster模块设置子进程的stdio

    原因

    子进程的stdout及stderr需要被设置为某个文件,根据文档 setupMaster 说明,需要设置stdio数组:

    c.setupMaster({
            exec: `${cwd}/c.js`,
            stdio: [0, 1, 2, 'ipc']
    })
    

    其中,stdio中的项可以为数组。

    小问题

    master.js

    let c = require('cluster');
    let fs = require('fs');
    let path = require('path');
    let cwd = process.cwd();
    
    let o = fs.createWriteStream(path.join(cwd, 'out.log'));
    c.setupMaster({
            exec: `${cwd}/c.js`,
            stdio: [0, o, o, 'ipc']
    })
        
    c.fork();
    

    c.js

    console.log(13324)
    console.error('error')
    

    如果直接这样使用,则会抛错

    throw new errors.TypeError('ERR_INVALID_OPT_VALUE', 'stdio',
          ^
    TypeError [ERR_INVALID_OPT_VALUE]: The value "WriteStream"
    

    原因是stdio中的stream对象还未准备好,因此需要提前创建流。
    如下:

    let c = require('cluster');
    let fs = require('fs');
    let path = require('path');
    let cwd = process.cwd();
    
    let o = fs.createWriteStream(path.join(cwd, 'out.log'));
    
    setTimeout(() => {
        c.setupMaster({
            exec: `${cwd}/c.js`,
            stdio: [0, o, o, 'ipc']
        })
        
        c.fork();
    },10)
    
  • 相关阅读:
    真的是最后一次作业了!!!!
    最后一次总结
    作业十一总结?
    作业十一总结
    实验十总结
    作业9总结
    附加作业
    补交第十次作业
    补交第九次作业
    补交第八次作业
  • 原文地址:https://www.cnblogs.com/accordion/p/12023874.html
Copyright © 2011-2022 走看看