溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

spawn與exec的相同點是什么

發(fā)布時間:2022-03-18 14:30:54 來源:億速云 閱讀:228 作者:iii 欄目:web開發(fā)

本篇內(nèi)容主要講解“spawn與exec的相同點是什么”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學(xué)習(xí)“spawn與exec的相同點是什么”吧!

  Node.js基于事件驅(qū)動來處理并發(fā),它本身是以單線程模式運行的。Node.js通過child_process開啟子進程執(zhí)行指定程序。主要包括4個異步進程函數(shù)(spawn,exec,execFile,fork)和3個同步進程函數(shù)(spawnSync,execFileSync,execSync)。一般我們比較常用的是spawn和exec這兩個方法。其中異步進程函數(shù)spawn是最基本的創(chuàng)建子進程的函數(shù),其他三個異步函數(shù)都是對spawn不同程度的封裝。spawn只能運行指定的程序,參數(shù)需要在列表中給出,而exec可以直接運行復(fù)雜的命令。

  默認情況下,和的管道在父 Node.js 進程和衍生的子進程之間建立。這些管道具有有限的(與平臺相關(guān))容量。 如果子進程在沒有捕獲輸出的情況下寫入超出該限制的 stdout,則子進程將阻塞等待管道緩沖區(qū)接受更多的數(shù)據(jù)。 這與 shell 中的管道行為相同。 如果不需要輸出,則使用      方法異步地衍生子進程,并且不阻塞 Node.js 事件循環(huán)。而方法則以同步的方式提供等效功能,但會阻止事件循環(huán)直到衍生的進程退出或終止。

  為方便起見,模塊提供了和的一些同步和異步的替代方法。注意,這些替代方法中的每一個都是基于或?qū)崿F(xiàn)的。

  :衍生一個 shell 并在該 shell 中運行命令,當完成時則將 和  傳給回調(diào)函數(shù)。:類似于 ,除了它默認會直接衍生命令且不首先衍生 shell。:衍生一個新的 Node.js 進程,并通過建立 IPC 通信通道來調(diào)用指定的模塊,該通道允許在父進程與子進程之間發(fā)送消。: 的同步版本,會阻塞 Node.js 事件循環(huán)。: 的同步版本,會阻塞 Node.js 事件循環(huán)。

  對于某些用例,例如自動化的 shell 腳本,同步的方法可能更方便。 但是在大多數(shù)情況下,同步的方法會對性能產(chǎn)生重大影響,因為它會停止事件循環(huán)直到衍生的進程完成。

  child_process.spawn(command[, args][, options])

  child_process.exec(command[, options], callback)

  spawn與exec的相同點

  1、都用于開一個子進程執(zhí)行指定命令。

  2、都可以自定義子進程的運行環(huán)境。

  3、都返回一個ChildProcess對象,所以他們都可以取得子進程的標準輸入流、標準輸出流和標準錯誤流。

  spawn與exec的不同點

  1、接受參數(shù)的方式:spawn使用了參數(shù)數(shù)組,而exec則直接接在命令后。

  比如要運行  命令, 使用spawn函數(shù)需要寫成,而使用exec函數(shù)時,可以直接寫成。exec是會先進行Shell語法解析,因此用exec函數(shù)可以更方便的使用復(fù)雜的Shell命令,包括管道、重定向等。

  2、子進程返回給Node的數(shù)據(jù)量:spawn沒有限制子進程可以返回給Node的數(shù)據(jù)大小,而exec則在options配置對象中有maxBuffer參數(shù)限制,且默認為200K,如果超出,那么子進程將會被殺死,并報錯:,雖然可以手動調(diào)大maxBuffer參數(shù),但是并不被推薦。由此可窺見一番Node.js設(shè)置這兩個API時的部分本意,spawn應(yīng)用來運行返回大量數(shù)據(jù)的子進程,如圖像處理,文件讀取等。而exec則應(yīng)用來運行只返回少量返回值的子進程,如只返回一個狀態(tài)碼。

  3、exec方法相比spawn方法,多提供了一個回調(diào)函數(shù),可以更便捷得獲取子進程輸出。這與從返回的ChildProcess對象的stdout或stderr監(jiān)聽data事件來獲得輸出的區(qū)別是: data事件的方式,會在子進程一有數(shù)據(jù)時就觸發(fā),并把數(shù)據(jù)返回給Node。而回調(diào)函數(shù),則會先將數(shù)據(jù)緩存在內(nèi)存中(數(shù)據(jù)量小于maxBuffer參數(shù)),等待子進程運行完畢后,再調(diào)用回調(diào)函數(shù),并把最終數(shù)據(jù)交給回調(diào)函數(shù)。

到此,相信大家對“spawn與exec的相同點是什么”有了更深的了解,不妨來實際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進入相關(guān)頻道進行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI