NodeJs之child_process

来源:http://www.cnblogs.com/zqzjs/archive/2016/11/19/6080531.html
-Advertisement-
Play Games

一:child_process child_process是NodeJs的重要模塊。幫助我們創建多進程任務,更好的利用了電腦的多核性能。 當然也支持線程間的通信。 二:child_process的幾個API 非同步: child_process.exec(command[, options][, c ...


 

一:child_process


child_process是NodeJs的重要模塊。幫助我們創建多進程任務,更好的利用了電腦的多核性能。

當然也支持線程間的通信。

 

二:child_process的幾個API


非同步:

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

child_process.execFile(file[, args][, options][, callback])

child_process.fork(modulePath[, args][, options])

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

同步:

child_process.execFileSync(file[, args][, options])

child_process.execSync(command[, options])

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

事件:

Event: 'close'

Event: 'disconnect'

Event: 'error'

Event: 'exit'

Event: 'message'

 

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


command:只執行的命令

args:參數列表

options:環境變數

先用一下:查詢磁碟大小

var child_process = require('child_process');
var spawn = child_process.spawn;

var wmic = spawn('wmic', ['DiskDrive', 'get', 'Size', '/value']);

wmic.stdout.on('data', function(data) {
     console.log('使用spawn方法輸出: ' + data);
 });

wmic.stderr.on('data', function(data) {
     console.log('stderr: ' + data);
});

wmic.on('close', function(code) {
     console.log('child process exited with code ' + code);
});

上面的命令在cmd中:wmic DiskDrive get Size /value

Node 通過 child_process 模塊提供了類似 popen(3) 的處理三向數據流(stdin/stdout/stderr)的功能。

 

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


exec添加了對shell命令的解析,可以執行複雜的命令。不需要像spawn一樣分開寫參數。並且有一個回調。

直接使用:wmic DiskDrive get Size /value

var child_process = require('child_process');
var exec = child_process.exec;

exec('wmic DiskDrive get Size /value', function (error, stdout, stderr) {
   if (error) {
     console.log(error.stack);
     console.log('Error code: '+error.code);
     return;
   }
   console.log('使用exec方法輸出: '+stdout);
   console.log(`stderr: ${stderr}`);
});

如果沒出錯,error參數為null,退出碼為0.只要不為0,就出錯。

 

五:child_process.execFile(file[, args][, options][, callback])


不執行shell.

使用:

var execFile = require('child_process').execFile;
var child = execFile('node', ['--version'], (error, stdout, stderr) => {
  if (error) {
    throw error;
  }
  console.log(stdout);
});

 

六:child_process.fork(modulePath[, args][, options])


不同於spawn,fork函數會在進程間建立通訊通道。

使用:父子進程的通信。這個經常使用!

parent.js

//主進程
var childProcess = require('child_process');
var child = childProcess.fork('./child.js');

//接受來自子進程的消息
n.on('message', function(msg) {
  console.log('來自子進程的消息: ', msg);
});

//發送消息給子(fork)進程
n.send({ hello: 'zqz' });

 

child.js

//子進程
//接受來自父進程的消息
process.on('message', function(msg) {
  console.log('收到父進程的消息:', msg);
});

//向父進程發送消息
process.send({ Hello: 'Mr.zhao' });

 

七:close 事件


“關閉”事件在會在所有stdio流子進程關閉時候觸發。這是有別於“退出”的事件,因為多個進程可以共用相同的stdio流。

 

八:disconnect 事件


在子進程或父進程中使用使用.disconnect()方法後,這個事件會被觸發,在斷開之後,就不可能再相互發送信息了。

可以通過檢查子進程的child.connected屬性是否為true去檢查是否可以發送信息。

 

九:error 事件


觸發的條件:

1.進程不能被創建, 或者

2.進程不能被終止掉, 或者

3.由任何原因引起的數據發送到子進程失敗.

 

十:exit 事件


這個事件是在子進程被結束的時候觸發的. 假如進程被正常結束,‘code’就是退出進程的指令代碼, 否則為'null'. 假如進程是由於接受到signal結束的, signal 就代表著信號的名稱, 否則為null.

 

十一:message 事件


通過.send()發送的信息可以通過監聽'message'事件獲取到。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 軟體工程的構件化道路發展到今天,已經具有成熟的技術。這就像今天的大廈建築一樣,使用預製的構件,就能建造萬丈高樓。同樣道理,使用Spring Boot開發框架,也可以支持這種構件化的功能,正像其官方網站所介紹的那樣,你甚至可以不用寫一行代碼,就可運行一個應用:“Spring Boot makes it ...
  • (一) 下邊使用outputStream位元組輸出流進行寫操作 package zdbIO;import java.io.File;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.I ...
  • 6 類型推測 java編譯器能夠檢查所有的方法調用和對應的聲明來決定類型的實參,即類型推測,類型的推測演算法推測滿足所有參數的最具體類型,如下例所示: 6.1 泛型方法的類型推測 類型的推測可以使泛型方法的使用語法和普通的方法一樣,不必指定尖括弧內的類型,如上述例子。 6.2 泛型類的類型推測 對於泛 ...
  • 複習一下: 1.先創建一個properties配置文件 2.載入讀取配置文件 import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.s ...
  • 一切偉大的行動和思想,都有一個微不足道的開始! ...
  • 1、列偏移與列排序: ①列偏移:控制列出現的位置,某列偏移後,後序列會隨之偏移——只能右偏移; col-lg/md/sm/xs-offset-*; ②列排序:控制某一列的位置,該列可以左(pull)右(push)調整,其排序後,其它列不受影響; col-lg/md/sm/xs-push-*:右移; ...
  • js元素綁定事件 想給一個元素綁定一個方法之後,在綁定一個方法而且不被覆蓋 window.onload = function () { alert('a'); } window.onlaod=function(){ alert('b') } 我們發現它只彈出一個,有一個被覆蓋了 下麵就說一下js中的 ...
  • 在JavaScript中,RegExp對象表示正則表達式,用來對字元串進行匹配。 一、兩種定義方法: 1、直接量法: /pattern/attribute 2、對象法: new RegExp(pattern,attribute); 參數說明: pattern是一個字元串,指定了正則表達式的模式或其他 ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...