Node被設計用來高效的處理I/O操作,但是你應該知道,有些類型的程序并不適合這種模式。比如,如果你打算用Node處理一個CPU密集的任務,你可能會堵塞事件循環,并因此降低了程序的響應。替代辦法是,把CPU密集的任務分配給一個單獨的進程來處理,從而釋放事件循環。Node允許你產生進程,并把這個新進程做為它父進程的子進程。在Node里,子進程可以和父進程進行雙向通信,而且在某種程度上,父進程還可以監控和管理子進程。
另外一種需要使用子進程的情況是,當你想簡單地執行一個外部命令,并讓Node獲取命令的返回值時。比如,你可以執行一個UNIX命令、腳本或者其他那些不能在Node里直接執行的命令。
本章將向你展示如何執行外部命令,創建,并和子進程通信,以及終結子進程。重點是讓你了解如何在Node進程外完成一系列任務。 執行外部命令
當你需要執行一個外部shell命令或可執行文件時,你可以使用child_process模塊,像這樣導入它:
exec(command,callback);
//譯者注:如果使用windows,可改為windows命令,比如dir,后面不再贅述
});
如果有錯誤發生,第一個參數將會是一個Error類的實例,如果第一個參數不包含錯誤,那么第二個參數stdout將會包含命令的標準輸出。最后一個參數包含命令相關的錯誤輸出。
列表8-1 展示了一個復雜些的執行外部命令的例子
LISTING 8-1:執行外部命令(源碼:chapter8/01_external_command.js)