模組process
進程處理模組,用以管理目前進程的資源
引用方法:
1var process = require('process');
行程事件
process 模組物件是EventEmitter的實例,可以透過註冊事件監聽器來回應進程層級的事件。
beforeExit 事件
當fibjs 的任務已經為空,並且沒有額外的工作被加入進來,事件beforeExit
會被觸發
1process.on('beforeExit', exitCode => {});
正常情況下,如果沒有額外的工作被加入到任務佇列,fibjs 程序會結束。但如果beforeExit
事件綁定的監聽器的回呼函數中,啟動了一個新的任務,例如開啟一個fiber,那麼fibjs 進程就會繼續運作。
process.exitCode作為唯一的參數值傳遞給beforeExit
事件監聽器的回呼函數。如果進程由於明確的原因而將要終止,例如直接調用process.exit或拋出未捕獲的異常,beforeExit
事件不會被觸發。
exit 事件
當fibjs 退出時,事件exit
會被觸發,一旦所有與exit
事件綁定的監聽器執行完成,程序會終止
1process.on('exit', exitCode => {});
exit
事件監聽器的回呼函數,只有一個入參,這個參數的值可以是process.exitCode的屬性值,或者是調用process.exit方法時傳入的exitCode
值。
Signal 事件
當fibjs 進程接收到一個訊號時,會觸發訊號事件,目前支援的訊號有SIGINT 和SIGTERM。每個事件名稱,以訊號名稱的大寫表示(例如事件'SIGINT' 對應訊號SIGINT)。
訊號事件不同於其它進程事件,訊號事件是搶佔的,當訊號發生時,無論當前在io操作,還是JavaScript 運算,都會盡快觸發對應事件。例如你可以用下面的程式碼,中斷目前應用,並輸出運作狀態:
1
2
3
4
5
6var 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 不支援此方法
1static Integer process.umask(Integer mask);
呼叫參數:
- mask: Integer, 指定新的掩碼
回傳結果:
- Integer, 返回之前的mask
改變目前的umask,Windows 不支援此方法
1static Integer process.umask(String mask);
呼叫參數:
- mask: String, 指定新的掩碼, 字串類型八進位(eg: "0664")
回傳結果:
- Integer, 返回之前的mask
傳回目前的umask,Windows 不支援此方法
1static Integer process.umask();
回傳結果:
- Integer, 傳回目前的mask 值
hrtime
返回系統高精度時間,此時間與當前時間無關,僅用於高精度計時
1static Array process.hrtime(Array diff = []);
呼叫參數:
- diff: Array, 用於比較的初始時間
回傳結果:
- Array, 返回計時時間,格式為[seconds, nanoseconds]
exit
退出目前進程,並回傳exitCode 作為進程結果
1static process.exit();
退出目前進程,並傳回結果
1static process.exit(Integer code);
呼叫參數:
- code: Integer, 傳回進程結果
cwd
返回作業系統目前工作路徑
1static String process.cwd();
回傳結果:
- String, 返回目前系統路徑
dlopen
動態載入C++ Addons
1
2
3static process.dlopen(Object module,
String filename,
Integer flags = 1);
呼叫參數:
- module: Object, 指定要載入的模組
- filename: String, 指定要載入的模組檔名
- flags: Integer, 指定載入模組的方式,預設為 1
chdir
修改作業系統目前工作路徑
1static process.chdir(String directory);
呼叫參數:
- directory: String, 指定設定的新路徑
uptime
查詢運行環境運行時間,以秒為單位
1static Number process.uptime();
回傳結果:
- Number, 傳回表示時間的數值
cpuUsage
查詢目前進程在使用者和系統程式碼中花費的時間,其值為微秒值(百萬分之一秒)
1static Object process.cpuUsage(Object previousValue = {});
呼叫參數:
- previousValue: Object, 指定上一次查詢的時間
回傳結果:
- Object, 返回包含時間報告
記憶體報告產生類似以下結果:
1
2
3
4{
"user": 132379,
"system": 50507
}
其中:
- user 傳回進程在使用者程式碼中花費的時間
- system 傳回進程在系統程式碼中花費的時間
memoryUsage
查詢目前進程記憶體使用報告
1static Object process.memoryUsage();
回傳結果:
- Object, 返回包含記憶體報告
記憶體報告產生類似以下結果:
1
2
3
4
5{
"rss": 8622080,
"heapTotal": 4083456,
"heapUsed": 1621800
}
其中:
- rss 傳回進程目前佔用實體記憶體大小
- heapTotal 返回v8 引擎堆內存大小
- heapUsed 返回v8 引擎正在使用堆內存大小
nextTick
啟動一個纖程
1
2static process.nextTick(Function func,
...args);
呼叫參數:
- func: Function, 制定纖程執行的函數
- args: ..., 可變參數序列,此序列會在纖程內傳遞給函數
binding
取得指定名稱的內部模組
1static Value process.binding(String name);
呼叫參數:
- name: String, 指定要查詢的內部模組名稱
回傳結果:
- Value, 傳回指定的內部模組
getgid
查詢目前進程的群組id
1static Integer process.getgid();
回傳結果:
- Integer, 傳回目前進程的群組id
getuid
查詢目前進程的使用者id
1static Integer process.getuid();
回傳結果:
- Integer, 傳回目前進程的使用者id
setgid
設定目前進程的組id
1static process.setgid(Integer id);
呼叫參數:
- id: Integer, 指定要設定的群組id
setuid
設定當前進程的使用者id
1static process.setuid(Integer id);
呼叫參數:
- id: Integer, 指定要設定的使用者id
emitWarning
發出自訂或特定於應用程式的進程警告。可以透過在'warning' 事件中加入處理程序來監聽這些事件
1
2static 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
17const {
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
3static process.emitWarning(Value warning,
String type = "Warning",
String code = "");
呼叫參數:
- warning: Value, 指定要發出的警告
- type: String, 指定發出的警告類型的名稱。預設值:'Warning'
- code: String, 指定發出的警告實例的唯一標識符
disconnect
關閉與父進程的ipc 管道
1static process.disconnect();
send
向父進程發送一個訊息
1static process.send(Value msg);
呼叫參數:
- msg: Value, 指定發送的訊息
靜態屬性
argv
Array, 傳回目前程序的命令列參數
1static readonly Array process.argv;
execArgv
Array, 傳回目前進程的特殊命令列參數,這些參數被fibjs 用於設定運行環境
1static readonly Array process.execArgv;
version
String, 傳回fibjs 版本字串
1static readonly String process.version;
versions
Object, 傳回fibjs 及元件的版本訊息
1static readonly Object process.versions;
execPath
String, 查詢目前執行執行檔完整路徑
1static readonly String process.execPath;
env
Object, 查詢目前進程的環境變數
1static readonly Object process.env;
arch
String, 查詢目前cpu 環境,可能的結果為'amd64', 'arm', 'arm64', 'ia32'
1static readonly String process.arch;
platform
String, 查詢目前平台名稱,可能的結果為'darwin', 'freebsd', 'linux', 或'win32'
1static readonly String process.platform;
pid
Integer, 讀取目前物件指向的進程的id
1static readonly Integer process.pid;
ppid
Integer, 讀取目前物件指向的父進程的id
1static readonly Integer process.ppid;
stdin
Stream, 查詢目前進程標準輸入物件, 在tty中為TTYInputStream, 否則為Stream
1static readonly Stream process.stdin;
stdout
Stream, 查詢目前進程標準輸出物件, 在tty中為TTYOutputStream, 否則為Stream
1static readonly Stream process.stdout;
stderr
Stream, 查詢目前進程標準錯誤輸出物件, 在tty中為TTYOutputStream, 否則為Stream
1static readonly Stream process.stderr;
exitCode
Integer, 查詢並設定目前程序的退出碼
1static Integer process.exitCode;
connected
Boolean, 查詢與父行程的管道是否正常連接
1static readonly Boolean process.connected;