<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Node.js幾種創(chuàng)建子進(jìn)程方法

          共 2060字,需瀏覽 5分鐘

           ·

          2020-11-05 12:24

          來源 | https://github.com/CommanderXL/biu-blog/issues/25

          exec

          其中exec可用于在指定的shell當(dāng)中執(zhí)行命令。不同參數(shù)間使用空格隔開,可用于復(fù)雜的命令。
          const { exec } = require('child_process')exec('cat *.js bad_file | wc -l')
          exec方法用于異步創(chuàng)建一個(gè)新的子進(jìn)程,可以接受一個(gè)callback。
          exec('cat *.js bad_file | wc -l', (err, stdout, stderr) => { console.log(stdout)})
          傳給回調(diào)的stdout和stderr參數(shù)會(huì)包含子進(jìn)程的stdout和stderr的輸出。

          execFile

          child_process.execFile(file[, args][, options][, callback])
          const { execFile } = require('child_process')execFile('node', ['--version'], (err, stdout, stderr) => { console.log(stdout)})
          不是直接衍生一個(gè)shell。而是指定的可執(zhí)行的文件直接創(chuàng)建一個(gè)新的進(jìn)程。

          fork

          child_process.fork(modulePath[, args][, options])
          創(chuàng)建一個(gè)新的node子進(jìn)程。調(diào)用該方法后返回一個(gè)子進(jìn)程的對(duì)象。通過fork方法創(chuàng)建出來的子進(jìn)程可以和父進(jìn)程通過內(nèi)置的ipc通道進(jìn)行通訊。
          衍生的 Node.js 子進(jìn)程與兩者之間建立的 IPC 通信信道的異常是獨(dú)立于父進(jìn)程的。每個(gè)進(jìn)程都有自己的內(nèi)存,使用自己的 V8 實(shí)例。
          由于需要額外的資源分配,因此不推薦衍生大量的 Node.js 進(jìn)程。
          其中在options的配置信息當(dāng)中:

          silent

          父子進(jìn)程間stdin/stdout/stderr之間的通訊。
          如果置為true,那么子進(jìn)程的標(biāo)準(zhǔn)輸入輸出都會(huì)被導(dǎo)流到父進(jìn)程中:
          parent.jsconst { fork } = require('child_process')const fd = fork('./sub.js')
          fd.stdout.on('data', data => console.log(data))
          sub.jsconsole.log('this is sub process')
          一般在子進(jìn)程中如果有stdin的時(shí)候,可將stdin直接導(dǎo)入到父進(jìn)程中,這樣可進(jìn)行tty和shell的交互。
          如果置為false,那么子進(jìn)程的標(biāo)準(zhǔn)輸入輸出都會(huì)繼承父進(jìn)程的。
          stdio
          關(guān)于這個(gè)的配置見下文。
          spawn
          child_process.spawn(command[, args][, options])
          上面說到的exec,execFile和fork創(chuàng)建新的子進(jìn)程都是基于這個(gè)方法進(jìn)行的封裝。
          調(diào)用這個(gè)方法返回子進(jìn)程對(duì)象。

          父子進(jìn)程間的通訊

          其中通過fork方法和spawn創(chuàng)建新的子進(jìn)程時(shí),在配置選項(xiàng)中有關(guān)于stdio的?字段:
          這個(gè)字段主要用于父子進(jìn)程間的管道配置。默認(rèn)情況下,子進(jìn)程的 stdin、 stdout 和 stderr 會(huì)重定向到 ChildProcess 對(duì)象上相應(yīng)的 subprocess.stdin、 subprocess.stdout 和 subprocess.stderr 流。
          這等同于將 options.stdio 設(shè)為?['pipe', 'pipe', 'pipe']。
          pipe?- 等同于 [pipe,?pipe,?pipe] (默認(rèn))
          ignore?- 等同于 [ignore,?ignore,?ignore]
          inherit?- 等同于 [process.stdin,?process.stdout,?process.stderr] 或 [0,1,2]
          其中inherit即繼承父進(jìn)程的標(biāo)準(zhǔn)輸入輸出(和父進(jìn)程共享)。
          const { spawn } = require('child_process');
          // 子進(jìn)程使用父進(jìn)程的 stdiosspawn('prg', [], { stdio: 'inherit' });
          // 衍生的子進(jìn)程只共享 stderrspawn('prg', [], { stdio: ['pipe', 'pipe', process.stderr] });
          // 打開一個(gè)額外的 fd=4,用于與程序交互spawn('prg', [], { stdio: ['pipe', null, null, null, 'pipe'] });
          本文完~


          瀏覽 55
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  中文字幕日本无码一区 | 成人一二区 | 天天天天天干天天天天天日 | 欧美三级片手机在线观看 | 欧美日本二三区 |