亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

node的process以及child_process模塊學習筆記

2019-11-19 14:13:53
字體:
來源:轉載
供稿:網友

在死磕進程一個禮拜后,終于把晦澀難懂文檔看明白了,準備把自己的理解分享給大家,也希望大家能指出一些意見

進程的概念

  1. 在Node.js中每個應用程序都是一個進程類的實例對象。
  2. 使用process對象代表應用程序,這是一個全局對象,可以通過它來獲取Node.jsy應用程序以及運行該程序的用戶、環境等各種信息的屬性、方法和事件。

進程中幾個重要的屬性

  1. stdin 標準輸入可讀流
  2. stdout 標準輸入可寫流
  3. stderr 標準錯誤輸出流
  4. argv 終端輸入參數數組
  5. env 操作系統環境信息
  6. pid 應用程序進程id

stdin以及stdout

process.stdin.on('data', (chunk) => { process.stdout.write('進程接收到數據' + chunk)})

運行結果

argv

console.log(process.env)

env: 在mac終端輸入 export NODE_ENV=develop

console.log(process.env.NODE_ENV) //develop

進程的方法

  1. process.memoryUsage() 查看內存使用信息
  2. process.nextTick() 當前eventloop執行完畢執行回調函數
  3. process.chdir() chdir方法用于修改Node.js應用程序中使用的當前工作目錄
  4. process.cwd() 進程當前工作目錄
  5. process.kill() 殺死進程
  6. process.uncaughtException() 當應用程序拋出一個未被捕獲的異常時觸發進程對象的uncaughtException事件
say() //方法不存在process.on('uncaughtException',function(err){ console.log('捕獲到一個未被處理的錯誤:',err);});

child_process

子進程是今天要講的重點,我也有一些不太明白,希望能和大家多多交流

child_process出現的背景

在Node.js中,只有一個線程執行所有操作,如果某個操作需要大量消耗CPU資源的情況下,后續操作都需要等待。

在Node.js中,提供了一個child_process模塊,通過它可以開啟多個子進程,在多個子進程之間可以共享內存空間,可以通過子進程的互相通信來實現信息的交換。

child_process模塊給予node任意創建子進程的能力,node官方文檔對于child_proces模塊給出了四種方法,映射到操作系統其實都是創建子進程。但對于開發者而已,這幾種方法的api有點不同

child_process.exec(command[, options][, callback]) 啟動
子進程來執行shell命令,可以通過回調參數來獲取腳本shell執行結果

child_process.execfile(file[, args][, options][, callback])
與exec類型不同的是,它執行的不是shell命令而是一個可執行文件

child_process.spawn(command[, args][, options])僅僅執行一個shell命令,不需要獲取執行結果

child_process.fork(modulePath[, args][, options])可以用node
執行的.js文件,也不需要獲取執行結果。fork出來的子進程一定是node進程

spawn

語法:child_process.spawn(command, [args], [options])

  1. command 必須指定的參數,指定需要執行的命令
  2. args 數組,存放了所有運行該命令需要的參數
  3. options 參數為一個對象,用于指定開啟子進程時使用的選項
const { spawn } = require('child_process')const path = require('path')let child1 = spawn('node', ['test1.js', 'yanyongchao'], { stdio: ['pipe', 'pipe', 'pipe'], // 三個元素數組 下面會詳解 cwd: __dirname, 子進程工作目錄 env: process.env, 環境變量 detached: true // 如果為true,當父進程不存在時也可以獨立存在})

其實上面都好理解除了sdtio數組,下面來一起分析stdio

stdio

stdio是一個數組,用來設置標準輸入,標準輸出,錯誤輸出。個人理解

pipe:父進程和子進程之間建立一個管道

主進程代碼

const path = require('path')const { spawn } = require('child_process')let p = spawn('node', ['childs_t.js'], { cwd: path.join(__dirname, 'childs'), stdio: ['pipe', 'pipe', process.stderr]})p.stdout.on('data', (data) => { console.log(data.toString())}) // 這里用stdout原因: 子進程的數據流與常規理解的數據流方向相反,// stdin:寫入流,stdout、stderr:讀取流。

子進程代碼

process.stdout.write('asd')

如果在stdio中放一個流,process.stdout,process.stdin

主進程代碼

const { spawn } = require('child_process')const path = require('path')// 如果放的是一個流,則意味著父進程和子進程共享一個流const p = spawn('node', ['child_t.js'], { cwd: path.join(__dirname, 'childs'), stdio: [process.stdin, process.stdout, process.stderr]})

子進程代碼

process.stdout.write('asd') //控制臺會輸出asd

ipc

主進程代碼

const path = require('path')const { spawn } = require('child_process')let p = spawn('node', ['child_t.js'], { cwd: path.join(__dirname, 'childs'), stdio: ['ipc', 'pipe', 'pipe']})p.on('message', (msg) => { console.log(msg)})p.send('hello chhild_process')

子進程代碼

process.on('message', (msg) => { process.send('子進程' + msg)})// child.send(message,[sendHandle]);//在父進程中向子進程發送消息// process.send(message,[sendHandle]);//在子進程中向主進程發送消息

detached模式

const { spawn } = require('child_process')const fs = require('fs')const path = require('path')let out = fs.openSync(path.join(__dirname, 'childs/msg.txt'), 'w', 0o666)let p = spawn('node', ['test4.js'], { detached: true, //保證父進程結束,子進程仍然可以運行 stdio: 'ignore', cwd: path.join(__dirname, 'childs')})p.unref()p.on('close', function() { console.log('子進程關閉')})p.on('exit', function() { console.log('子進程退出')})p.on('error', function(err) { console.log('子進程1開啟失敗' + err)})

fork開啟一個子進程

  1. 衍生一個新的 Node.js 進程,并通過建立一個 IPC 通訊通道來調用一個指定的模塊,該通道允許父進程與子進程之間相互發送信息
  2. fork方法返回一個隱式創建的代表子進程的ChildProcess對象
  3. 子進程的輸入/輸出操作執行完畢后,子進程不會自動退出,必須使用process.exit()方法顯式退出

子進程代碼

const { fork } = require('child_process')const path = require('path')let child = fork(path.join(__dirname, 'childs/fork1.js'))child.on('message', (data) => { console.log('父進程接收到消息' + data)})child.send('hello fork')child.on('error', (err) => { console.error(err)})

子進程代碼

process.on('message', (m, setHandle) => { console.log('子進程接收到消息' + m) process.send(m) //sendHandle是一個 net.Socket 或 net.Server 對象})

exec開啟子進程

// exec同步執行一個shell命令let { exec } = require('child_process')let path = require('path')// 用于使用shell執行命令, 同步方法let p1 = exec('node exec.js a b c', {cwd: path.join(__dirname, 'childs')}, function(err, stdout, stderr) { console.log(stdout)})

execFile開啟子進程

let { execFile } = require('child_process')let path = require('path')let p1 = execFile('node', ['exec.js', 'a', 'b', 'c'], { cwd: path.join(__dirname, 'childs')}, function(err, stdout, stderr) { console.log(stdout)})

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
丝袜情趣国产精品| 成人免费大片黄在线播放| 俺也去精品视频在线观看| 免费91在线视频| 色综合伊人色综合网站| 亚洲国产精品人久久电影| 亚洲天堂av在线免费观看| 日韩精品视频中文在线观看| 91av免费观看91av精品在线| 国产成人a亚洲精品| 亚洲精品v天堂中文字幕| 亚洲剧情一区二区| 成人日韩av在线| 亚洲国产美女精品久久久久∴| 国产精品久久久久久久久久三级| 久久人人爽人人| 久久久人成影片一区二区三区| 国产精品高潮呻吟久久av野狼| 福利一区视频在线观看| 亚洲第一黄色网| 亚洲最大激情中文字幕| 欧美自拍大量在线观看| 国产精品视频在线观看| 成人免费视频网| 国产精品成人va在线观看| 国产成人小视频在线观看| 在线观看精品国产视频| 国产美女精品视频| 亚洲国产成人精品久久久国产成人一区| 久久99精品久久久久久噜噜| 亚洲欧美中文日韩在线v日本| 欧美电影免费观看电视剧大全| 色偷偷偷综合中文字幕;dd| 北条麻妃99精品青青久久| 日本三级韩国三级久久| 97涩涩爰在线观看亚洲| 欧美剧在线观看| 国产成人a亚洲精品| 国产精品免费看久久久香蕉| 欧美激情亚洲综合一区| 日韩美女写真福利在线观看| www.欧美三级电影.com| 亚洲黄色av网站| 在线观看日韩专区| 北条麻妃久久精品| 欧美成人免费一级人片100| 美女国内精品自产拍在线播放| 亚洲人精品午夜在线观看| 一区二区三区 在线观看视| 亚洲欧美日韩中文在线制服| 亚洲 日韩 国产第一| 亚洲免费一级电影| 2021久久精品国产99国产精品| 国产精品视频自拍| 日韩欧美高清在线视频| 日韩激情av在线免费观看| 日韩欧美中文字幕在线观看| 中文字幕日本精品| 中文字幕日韩在线观看| 久久资源免费视频| 91精品久久久久久久久久久久久久| 精品无人区乱码1区2区3区在线| 亚洲国产成人精品电影| 伊人成人开心激情综合网| 国产精品日日摸夜夜添夜夜av| 久久久噜噜噜久久久| 欧美日韩亚洲网| 欧美丰满少妇xxxxx做受| 91精品久久久久久久| 国产ts一区二区| 中文字幕亚洲一区二区三区| 日韩av电影手机在线观看| 97免费视频在线播放| 国产精品视频导航| 国产精品电影久久久久电影网| 中日韩午夜理伦电影免费| 国产精品专区h在线观看| 91精品中国老女人| 欧美大尺度激情区在线播放| 精品亚洲永久免费精品| 狠狠色香婷婷久久亚洲精品| 国产精品视频久久久| 国产成人午夜视频网址| 中文字幕av一区| 日韩av第一页| 色偷偷偷综合中文字幕;dd| 91久久国产精品91久久性色| 欧美色视频日本高清在线观看| 国产精品va在线播放我和闺蜜| 欧美日韩午夜视频在线观看| 18性欧美xxxⅹ性满足| 日韩激情av在线播放| 国产精品爽爽爽| 久久久久久久久久久人体| 亚洲三级黄色在线观看| 国产精品美女网站| 国产精品偷伦免费视频观看的| 亚洲白拍色综合图区| 97婷婷大伊香蕉精品视频| 欧美性生活大片免费观看网址| 国产一区在线播放| 亚洲欧美日韩中文在线制服| 日韩小视频在线| 国产精品视频白浆免费视频| 国产亚洲激情在线| 亚洲男人的天堂网站| 欧美色道久久88综合亚洲精品| 亚洲一区制服诱惑| 久久久免费精品视频| 亚洲一区二区三区四区视频| 日韩黄色高清视频| 亚洲一级一级97网| 欧美又大又硬又粗bbbbb| 亚洲国产美女久久久久| 国产精品高潮呻吟视频| 成人免费在线网址| 日韩精品极品视频| 一本色道久久综合亚洲精品小说| 亚洲精品国产综合区久久久久久久| 国产一区二区免费| 亚洲男人7777| 欧美一级bbbbb性bbbb喷潮片| 久久久国产精品x99av| 国产美女扒开尿口久久久| 在线播放国产一区中文字幕剧情欧美| 国产精品久久久久久久久久新婚| 欧美国产日韩中文字幕在线| 亚洲va国产va天堂va久久| 欧美最顶级丰满的aⅴ艳星| 欧美精品久久久久久久久久| 日韩网站免费观看高清| 亚洲欧美中文日韩在线v日本| 国产精品久久久久久久久久| 亚洲精品永久免费精品| 中文字幕亚洲专区| 成人精品久久av网站| 91精品国产电影| 91久久国产精品91久久性色| 精品国产一区久久久| 久久免费国产视频| 日韩av影视综合网| 亚洲黄页网在线观看| 欧洲日本亚洲国产区| 91久久久久久久| 亚洲综合视频1区| 亚洲精品在线观看www| 久久国产天堂福利天堂| 日韩电影第一页| 日韩福利视频在线观看| 欧美成人免费网| 国产成人一区二区三区小说| 精品国产91久久久久久老师| 亚洲一区中文字幕| 久久久伊人日本| 综合欧美国产视频二区| 亚洲电影免费观看| 国产精品免费久久久久影院| 日韩av在线导航| 中文字幕久久亚洲| 欧美激情第一页xxx| 亚洲精品网站在线播放gif| 欧美乱大交xxxxx| 91精品国产综合久久香蕉的用户体验| 国产美女直播视频一区|