Module 基礎模組

模組process

進程處理模組,用以管理目前進程的資源

引用方法:

1
var process = require('process');

行程事件

process 模組物件是EventEmitter的實例,可以透過註冊事件監聽器來回應進程層級的事件。

beforeExit 事件

當fibjs 的任務已經為空,並且沒有額外的工作被加入進來,事件beforeExit會被觸發

1
process.on('beforeExit', exitCode => {});

正常情況下,如果沒有額外的工作被加入到任務佇列,fibjs 程序會結束。但如果beforeExit事件綁定的監聽器的回呼函數中,啟動了一個新的任務,例如開啟一個fiber,那麼fibjs 進程就會繼續運作。

process.exitCode作為唯一的參數值傳遞給beforeExit事件監聽器的回呼函數。如果進程由於明確的原因而將要終止,例如直接調用process.exit或拋出未捕獲的異常,beforeExit事件不會被觸發。

exit 事件

當fibjs 退出時,事件exit會被觸發,一旦所有與exit事件綁定的監聽器執行完成,程序會終止

1
process.on('exit', exitCode => {});

exit事件監聽器的回呼函數,只有一個入參,這個參數的值可以是process.exitCode的屬性值,或者是調用process.exit方法時傳入的exitCode值。

Signal 事件

當fibjs 進程接收到一個訊號時,會觸發訊號事件,目前支援的訊號有SIGINT 和SIGTERM。每個事件名稱,以訊號名稱的大寫表示(例如事件'SIGINT' 對應訊號SIGINT)。

訊號事件不同於其它進程事件,訊號事件是搶佔的,當訊號發生時,無論當前在io操作,還是JavaScript 運算,都會盡快觸發對應事件。例如你可以用下面的程式碼,中斷目前應用,並輸出運作狀態:

1 2 3 4 5 6
var coroutine = require('coroutine'); process.on('SIGINT', () => { coroutine.fibers.forEach(f => console.error("Fiber %d:\n%s", f.id, f.stack)); process.exit(); });

信號名稱及其意義如下:

  • SIGINT:在終端運行時,可以被所有平台支持,通常可以透過CTRL+C 觸發。
  • SIGTERM:當行程被kill 時觸發此訊號。Windows 下不支援。

靜態函數

umask

改變目前的umask,Windows 不支援此方法

1
static Integer process.umask(Integer mask);

呼叫參數:

  • mask: Integer, 指定新的掩碼

回傳結果:

  • Integer, 返回之前的mask

改變目前的umask,Windows 不支援此方法

1
static Integer process.umask(String mask);

呼叫參數:

  • mask: String, 指定新的掩碼, 字串類型八進位(eg: "0664")

回傳結果:

  • Integer, 返回之前的mask

傳回目前的umask,Windows 不支援此方法

1
static Integer process.umask();

回傳結果:

  • Integer, 傳回目前的mask 值

hrtime

返回系統高精度時間,此時間與當前時間無關,僅用於高精度計時

1
static Array process.hrtime(Array diff = []);

呼叫參數:

  • diff: Array, 用於比較的初始時間

回傳結果:

  • Array, 返回計時時間,格式為[seconds, nanoseconds]

exit

退出目前進程,並回傳exitCode 作為進程結果

1
static process.exit();

退出目前進程,並傳回結果

1
static process.exit(Integer code);

呼叫參數:

  • code: Integer, 傳回進程結果

cwd

返回作業系統目前工作路徑

1
static String process.cwd();

回傳結果:

  • String, 返回目前系統路徑

dlopen

動態載入C++ Addons

1 2 3
static process.dlopen(Object module, String filename, Integer flags = 1);

呼叫參數:

  • module: Object, 指定要載入的模組
  • filename: String, 指定要載入的模組檔名
  • flags: Integer, 指定載入模組的方式,預設為 1

chdir

修改作業系統目前工作路徑

1
static process.chdir(String directory);

呼叫參數:

  • directory: String, 指定設定的新路徑

uptime

查詢運行環境運行時間,以秒為單位

1
static Number process.uptime();

回傳結果:

  • Number, 傳回表示時間的數值

cpuUsage

查詢目前進程在使用者和系統程式碼中花費的時間,其值為微秒值(百萬分之一秒)

1
static Object process.cpuUsage(Object previousValue = {});

呼叫參數:

  • previousValue: Object, 指定上一次查詢的時間

回傳結果:

  • Object, 返回包含時間報告

記憶體報告產生類似以下結果:

1 2 3 4
{ "user": 132379, "system": 50507 }

其中:

  • user 傳回進程在使用者程式碼中花費的時間
  • system 傳回進程在系統程式碼中花費的時間

memoryUsage

查詢目前進程記憶體使用報告

1
static Object process.memoryUsage();

回傳結果:

  • Object, 返回包含記憶體報告

記憶體報告產生類似以下結果:

1 2 3 4 5
{ "rss": 8622080, "heapTotal": 4083456, "heapUsed": 1621800 }

其中:

  • rss 傳回進程目前佔用實體記憶體大小
  • heapTotal 返回v8 引擎堆內存大小
  • heapUsed 返回v8 引擎正在使用堆內存大小

nextTick

啟動一個纖程

1 2
static process.nextTick(Function func, ...args);

呼叫參數:

  • func: Function, 制定纖程執行的函數
  • args: ..., 可變參數序列,此序列會在纖程內傳遞給函數

binding

取得指定名稱的內部模組

1
static Value process.binding(String name);

呼叫參數:

  • name: String, 指定要查詢的內部模組名稱

回傳結果:

  • Value, 傳回指定的內部模組

getgid

查詢目前進程的群組id

1
static Integer process.getgid();

回傳結果:

  • Integer, 傳回目前進程的群組id

getuid

查詢目前進程的使用者id

1
static Integer process.getuid();

回傳結果:

  • Integer, 傳回目前進程的使用者id

setgid

設定目前進程的組id

1
static process.setgid(Integer id);

呼叫參數:

  • id: Integer, 指定要設定的群組id

setuid

設定當前進程的使用者id

1
static process.setuid(Integer id);

呼叫參數:

  • id: Integer, 指定要設定的使用者id

emitWarning

發出自訂或特定於應用程式的進程警告。可以透過在'warning' 事件中加入處理程序來監聽這些事件

1 2
static process.emitWarning(Value warning, Object options);

呼叫參數:

  • warning: Value, 指定要發出的警告
  • options: Object, 指定警告的選項

    選項包含以下內容:

1 2 3 4 5
{ "type": "Warning", // specifies the name of the type of warning issued. Default value: 'Warning' "code": "", // specify the unique identifier of the warning instance issued "detail": "" // specify additional text for warnings }

使用方法如下:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
const { emitWarning } = require('process'); // Emit a warning with a code and additional detail. emitWarning('Something happened!', { code: 'MY_WARNING', detail: 'This is some additional information', }); process.on('warning', (warning) => { console.warn(warning.name); // 'Warning' console.warn(warning.message); // 'Something happened!' console.warn(warning.code); // 'MY_WARNING' console.warn(warning.stack); // Stack trace console.warn(warning.detail); // 'This is some additional information' });

發出自訂或特定於應用程式的進程警告。可以透過在'warning' 事件中加入處理程序來監聽這些事件

1 2 3
static process.emitWarning(Value warning, String type = "Warning", String code = "");

呼叫參數:

  • warning: Value, 指定要發出的警告
  • type: String, 指定發出的警告類型的名稱。預設值:'Warning'
  • code: String, 指定發出的警告實例的唯一標識符

disconnect

關閉與父進程的ipc 管道

1
static process.disconnect();

send

向父進程發送一個訊息

1
static process.send(Value msg);

呼叫參數:

  • msg: Value, 指定發送的訊息

靜態屬性

argv

Array, 傳回目前程序的命令列參數

1
static readonly Array process.argv;

execArgv

Array, 傳回目前進程的特殊命令列參數,這些參數被fibjs 用於設定運行環境

1
static readonly Array process.execArgv;

version

String, 傳回fibjs 版本字串

1
static readonly String process.version;

versions

Object, 傳回fibjs 及元件的版本訊息

1
static readonly Object process.versions;

execPath

String, 查詢目前執行執行檔完整路徑

1
static readonly String process.execPath;

env

Object, 查詢目前進程的環境變數

1
static readonly Object process.env;

arch

String, 查詢目前cpu 環境,可能的結果為'amd64', 'arm', 'arm64', 'ia32'

1
static readonly String process.arch;

platform

String, 查詢目前平台名稱,可能的結果為'darwin', 'freebsd', 'linux', 或'win32'

1
static readonly String process.platform;

pid

Integer, 讀取目前物件指向的進程的id

1
static readonly Integer process.pid;

ppid

Integer, 讀取目前物件指向的父進程的id

1
static readonly Integer process.ppid;

stdin

Stream, 查詢目前進程標準輸入物件, 在tty中為TTYInputStream, 否則為Stream

1
static readonly Stream process.stdin;

stdout

Stream, 查詢目前進程標準輸出物件, 在tty中為TTYOutputStream, 否則為Stream

1
static readonly Stream process.stdout;

stderr

Stream, 查詢目前進程標準錯誤輸出物件, 在tty中為TTYOutputStream, 否則為Stream

1
static readonly Stream process.stderr;

exitCode

Integer, 查詢並設定目前程序的退出碼

1
static Integer process.exitCode;

connected

Boolean, 查詢與父行程的管道是否正常連接

1
static readonly Boolean process.connected;