摘要:說明模塊是的原始模塊主要作用執(zhí)行命令行命令該模塊的功能主要由函數(shù)提供區(qū)分和執(zhí)行命令第一個參數(shù)是將要執(zhí)行的命令,命令之間的參數(shù)使用空格分開第二個參數(shù)是回調(diào)函數(shù),有三個參數(shù)回調(diào)中的第一個參數(shù)命令執(zhí)行錯誤會有值,否則為回調(diào)中的第二個參數(shù)子進(jìn)程
1.說明
child_process 模塊是 Node.js 的原始模塊:
主要作用:執(zhí)行命令行命令
該模塊的功能主要由 child_process.spawn() 函數(shù)提供
2.區(qū)分exec和spawn 2-1 exec執(zhí)行命令const { exec } = require("child_process"); exec("ls -la /usr", (error, stdout, stderr) => { console.log(error); console.log(stdout); console.log(stderr); });
第一個參數(shù)是將要執(zhí)行的命令,命令之間的參數(shù)使用空格分開
第二個參數(shù)是回調(diào)函數(shù),有三個參數(shù)
回調(diào)中的第一個參數(shù):命令執(zhí)行錯誤會有值,否則為null 回調(diào)中的第二個參數(shù):子進(jìn)程的正常輸出內(nèi)容 回調(diào)中的第三個參數(shù):子進(jìn)程執(zhí)行錯誤的輸出2-2 spawn命令
const { spawn } = require("child_process"); const ls = spawn("ls", ["-la", "/usr"]); ls.stdout.on("data", (data) => { console.log(`stdout: ${data}`); }); ls.stderr.on("data", (data) => { console.log(`stderr: ${data}`); }); ls.on("close", (code) => { console.log(`子進(jìn)程退出碼:${code}`); });
第一個參數(shù)是命令
第二個參數(shù)是一個數(shù)組,數(shù)組中的每一個元素是執(zhí)行命令需要的參數(shù)
2-3 兩者對比需要特別注意的是,需要獲取執(zhí)行的內(nèi)容需要通過流的形式來進(jìn)行輸出
相同點:
都可以用來執(zhí)行命令行命令
不同點:
exec 用來執(zhí)行命令,命令和命令后跟的參數(shù)是寫在一個字符串中,作為函數(shù)的第一個參數(shù)
spawn 用來執(zhí)行命令,命令和命令后跟的參數(shù)是分開寫的
exec 的輸出內(nèi)容是在回調(diào)中輸出的,一次性分配 200K 大小的內(nèi)存空間,如果超出這個大小會報錯
spawn 的輸出內(nèi)容是通過流的形式進(jìn)行輸出的,沒有分配空間,不會報錯
總結(jié):spawn 比 exec 使用范圍要廣,因此,能使用 spawn 的盡量使用 spawn。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/89486.html
摘要:嚴(yán)格來說,并不是單線程的。其他異步和事件驅(qū)動相關(guān)的線程通過來實現(xiàn)內(nèi)部的線程池和線程調(diào)度。線程是最小的進(jìn)程,因此也是單進(jìn)程的。子進(jìn)程中執(zhí)行的是非程序,提供一組參數(shù)后,執(zhí)行的結(jié)果以回調(diào)的形式返回。在子進(jìn)程中通過和的機(jī)制來接收和發(fā)送消息。 ??node遵循的是單線程單進(jìn)程的模式,node的單線程是指js的引擎只有一個實例,且在nodejs的主線程中執(zhí)行,同時node以事件驅(qū)動的方式處理IO...
摘要:而且方式創(chuàng)建的子進(jìn)程與父進(jìn)程之間建立了通信管道,因此子進(jìn)程和父進(jìn)程之間可以通過的方式發(fā)送消息。與事件的回調(diào)函數(shù)有兩個參數(shù)和,代碼子進(jìn)程最終的退出碼,如果子進(jìn)程是由于接收到信號終止的話,會記錄子進(jìn)程接受的值。 在介紹child_process模塊之前,先來看一個下面的代碼。 const http = require(http); const longComputation = () =>...
摘要:因為進(jìn)程退出之后將不再執(zhí)行事件循環(huán),所有只有那些沒有回調(diào)函數(shù)的代碼才會被執(zhí)行。此外,創(chuàng)建的回調(diào)函數(shù)具有隔離性,他們之間不會相互影響。我們來看的一個簡單例子,他創(chuàng)建了一個子進(jìn)程,第一個參數(shù)是一個命令,第二個參數(shù)是回調(diào)函數(shù),處理返回結(jié)果。 雖然node對操作系統(tǒng)做了很多抽象的工作,但是你還是可以直接和他交互,比如和系統(tǒng)中已經(jīng)存在的進(jìn)程進(jìn)行交互,創(chuàng)建工作子進(jìn)程。node是一個用于事件循環(huán)的線...
摘要:子進(jìn)程使用反序列化消息字符串為消息對象。在調(diào)用這類方法時,遍歷列表中的實例發(fā)送內(nèi)部消息,子進(jìn)程列表中的對應(yīng)項收到內(nèi)部消息并處理返回,父進(jìn)程中再結(jié)合返回結(jié)果和對應(yīng)著這個類實例維護(hù)的信息,保證功能的正確性。 在 Node.js 中,當(dāng)我們使用 child_process 模塊創(chuàng)建子進(jìn)程后,會返回一個 ChildProcess 類的實例,通過調(diào)用 ChildProcess#send(mess...
摘要:在單核系統(tǒng)之上我們采用單進(jìn)程單線程的模式來開發(fā)。由進(jìn)程來管理所有的子進(jìn)程,主進(jìn)程不負(fù)責(zé)具體的任務(wù)處理,主要工作是負(fù)責(zé)調(diào)度和管理。模塊與模塊總結(jié)無論是模塊還是模塊,為了解決實例單線程運行,無法利用多核的問題而出現(xiàn)的。 前言 進(jìn)程與線程是一個程序員的必知概念,面試經(jīng)常被問及,但是一些文章內(nèi)容只是講講理論知識,可能一些小伙伴并沒有真的理解,在實際開發(fā)中應(yīng)用也比較少。本篇文章除了介紹概念,通過...
閱讀 1287·2021-11-25 09:43
閱讀 1654·2021-10-25 09:47
閱讀 2524·2019-08-30 13:46
閱讀 811·2019-08-29 13:45
閱讀 1336·2019-08-26 13:29
閱讀 3059·2019-08-23 15:30
閱讀 1169·2019-08-23 14:17
閱讀 1373·2019-08-23 13:43