process --進程
process
對象是一個全局對象,他提供當前Node.js進程相關的有關信息,以及控制當前Nodejs進程,因為是全局變量,所以不需要require
process 事件
process
對象是EventEmitter
的實例
beforeExit
事件
當Node
的EventLoop
為空時,并且沒有額外的工作被添加進來,事件beforeExit
會被觸發。正常情況下,如果沒有額外的工作被添加EventLoop
,Nodejs
進程會結束,但是如果beforeExit
事件綁定的監聽器的回調函數中,含有一個可以進行異步調用的操作,那么Nodejs
進程會繼續進行。
process.exitCode
作為唯一的參數值傳遞給beforeExit
事件監聽器的回調函數。
如果進程是由顯式的錯誤導致終止,則beforeExit
事件不會被觸發。
disconnect
事件
如果node進程是由IPC通道方式創建的,當IPC通道關閉是,會觸發disconnect
事件
exit
事件
兩種情況下exit
事件會被觸發
- 顯式調用
process.exit()
方法,使得Node.js進程即將結束 - Node事件循環數組中不在有額外的工作
exit
事件監聽器的回調函數,只有一個入參,這個參數的值可以是process.exitCode
的值,或者是調用process.exit()
方法事傳入的exitCode
值
process.on('exit',(code) => {
console.log(code)
setTimeout(() => {
console.log('該函數不會被執行')
})
})
message
事件
如果Node.js進程是由IPC通道的方式創建的,當子進程收到父進程發送的消息時,childprocess_send()發送
,會觸發message
事件
multipleResolve
事件
- type 錯誤類型,一個
resolve
或reject
- promise 不止一次解決或拒絕的承諾、
- value 在原始解析后解析或拒絕承諾的值
process.on('multipleResolves', (type, promise, reason) => {
console.error(type, promise, reason);
setImmediate(() => process.exit(1));
})
async function main() {
try {
return await new Promise((resolve, reject) => {
resolve('First call');
resolve('Swallowed resolve');
reject(new Error('Swallowed reject'));
});
} catch {
throw new Error('Failed');
}
}
main().then(console.log);
'uncaughtException'
事件
如果 Javascript 未捕獲的異常,沿著代碼調用路徑反向傳遞回事件循環,會觸發 'uncaughtException' 事件。 Node.js 默認情況下會將這些異常堆棧打印到 stderr 然后進程退出。 為 'uncaughtException' 事件增加監聽器會覆蓋上述默認行為。
正確使用uncaughtException
事件的方式,是用它在進程結束前執行一些已分配資源(比如文件描述符,句柄等等)的同步清理操作。觸發uncaughtException
事件后,用它來嘗試恢復應用正常運行的操作是不安全的。
unhandledRejection
事件
function SomeResource() {
// 將 loaded 的狀態設置為一個 rejected promise。
this.loaded = Promise.reject(new Error('錯誤信息'));
}
const resource = new SomeResource();
// resource.loaded 上沒有 .catch 或 .then。
warning
事件
任何時候Node,js發出進程告警,都會觸發waring
事件
'warning'
事件監聽器的回調函數,參數只有一個,其值為Error
對象。此對象有三個重要的屬性用來描述告警:
-
name
<string> 告警的名稱(目前默認值是Warning
)。 -
message
<string> 系統提供的對此告警的描述。 -
stack
<string> 當告警觸發時,包含代碼位置的堆棧信息。
process.on('warning', (warning) => {
console.warn(warning.name); // 打印告警名稱
console.warn(warning.message); // 打印告警信息
console.warn(warning.stack); // 打印堆棧信息
});
-
--no-warning
: 可以阻止默認從console輸出警告信息 -
--trace-warnings
:可以讓默認的console輸出告警信息,包含告警的全部堆棧信息 -
--throw-deprecation
:命令行選項標志啟動Node.js,會使得`custom deprecation warning作為異常信息拋出來 -
--trace-deprecation
:命令行選項標志,會使得custom deprecation warning打印到stderr,包括其堆棧信息。 -
--no-deprecation
命令行選項標志,會阻止報告所有的custom deprecation warning
process.abort()
process.abort()方法會使Node.js進程立即結束,并生成一個core文件。
process.arch
process.arch屬性返回一個表示操作系統CPU架構的字符串,Node.js二進制文件是為這些架構編譯的。 例如 'arm', 'arm64', 'ia32', 'mips', 'mipsel', 'ppc', 'ppc64', 's390', 's390x', 'x32', 或 'x64'。
process.argv
process.argv
屬性返回一個數組,這個數組包含了啟動Node.js進程時的命令行參數。第一個元素為process.execPath
。如果需要獲取argv[0]
的值請參見 process.argv0
。第二個元素為當前執行的JavaScript文件路徑。剩余的元素為其他命令行參數。
process.argv0
process.argv0屬性,保存Node.js啟動時傳入的argv[0]參數值的一份只讀副本。
process.channel
如果Nodejs進程是由IPC channel 方式創建的,process.channel屬性保存IPC channer的引用,如果IPC channel 不存在,此屬性值為undefined
process.chdir(directory)
process.chdir()
方法變更Node.js進程的當前工作目錄,如果變更目錄失敗會拋出異常(相當于linux的cd命令)
process.config
process.config
屬性返回一個JavaScript對象。此對象描述了用于變異當前Node執行程序時設計的配置信息。這與執行./configure
腳本生成的config.gypi
文件結果是一樣的
process.config屬性值不是只讀的,在Node.js生態系統中已經有模塊擴展,修改或完全替換了process.config的值
process.connected
如果Node.js進程是由IPC channel 方式創建的,只要IPC channel 保持連接,process.connected屬性就會返回true。process.disconnect()
被調用后,此屬性返回false
process.connected如果為false,則不能通過IPC channel 使用process.send()
發送消息
process.cpuUsage([previousValue])
process.cpuUsage()方法返回包含當前進程的用戶CPU時間和系統CPU時間的對象
process.cwd()
process.cwd()
方法返回nodejs進程當前工作
process.debugPort()
nodejs debug的端口
process.disconnect()
如果Node.js進程是從IPC頻道派生出來的,process.disconnect()
函數會關閉到父進程的IPC頻道,以允許子進程一旦沒有其他鏈接來保持活躍就關閉
process.emitWarning()
-
options
<對象>-
type
<string> 如果warning
是String,type
是警告類型的名字。 默認值:Warning
。 -
code
<string> 當前警告的唯一標識符。 -
ctor
<Function> 如果warning
是String,ctor
是可選的function,用于限制生成的堆棧信息。默認process.emitWarning
-
detail
<string> error的附加信息。
-
process.emitWarning()
方法可用于發出定制的或應用特定的進程警告。 可以通過給process.on('warning')
事件增加處理器,監聽這些警告。
// Emit a warning with a code and additional detail.
process.emitWarning('Something happened!', {
code: 'MY_WARNING',
detail: 'This is some additional information'
});
// Emits:
// (node:56338) [MY_WARNING] Warning: Something happened!
// 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'
});
process.env
process.env
屬性返回一個包含用戶環境信息的對象
在process.env中新增一個屬性,會將屬性值轉換成字符串
process.env.foo = 'bar';
console.log(process.env.foo);
process.execArgv
process.execAargv
屬性返回當Node.js進程被啟動時,Node.js特定的命令行選項。這些選項在process.argv屬性返回的數組中不會出現
node --harmony script.js --version
process.execArgv
的結果
['--harmony']
process.execPath
返回啟動Node進程的可執行文件所在的絕對路徑
process.exit([code])
process.exit()
方法以結束狀態碼code指示Node.js同步終止進程。如果code為提供。次exit方法要么使用sucess
狀態碼0,要么使用process.exitCode
屬性值
process.getegid()
返回Node進程的有效數字標記的組身份
process.geteuid()
返回node進程有效數字標記的用戶身份
process.getgid()
返回node進程的數字標記的組身份
process.getgroups()
返回數組,其中包含了補充的組ID。
process.getuid()
返回node進程的數字標記的用戶身份
process.hrtime([time])
process.hrtime()方法返回當前時間以[seconds, nanoseconds] tuple Array表示的高精度解析值, nanoseconds是當前時間無法使用秒的精度表示的剩余部分。
process.hrtime()返回的時間,都是相對于過去某一時刻的值,與一天中的時鐘時間沒有關系,因此不受制于時鐘偏差。 此方法最主要的作用是衡量間隔操作的性能:
const NS_PER_SEC = 1e9;
const time = process.hrtime();
// [ 1800216, 25 ]
setTimeout(() => {
const diff = process.hrtime(time);
// [ 1, 552 ]
console.log(`Benchmark took ${diff[0] * NS_PER_SEC + diff[1]} nanoseconds`);
// benchmark took 1000000552 nanoseconds
}, 1000);
process.kill(pid[,signal])
process.kill()
方法將signal
發送給pid
標識的進程。
process.on('SIGHUP', () => {
console.log('Got SIGHUP signal.');
});
setTimeout(() => {
console.log('Exiting.');
process.exit(0);
}, 100);
process.kill(process.pid, 'SIGHUP');
process.mainModule
process.mainModule
屬性提供了一種獲取require.main
的替代方式,區別在與,若主模塊在運行時中發生改變。require.main
可能仍然指向變化之前所依賴的模塊 一般來說,假定require.main
和process.mainModule
引用相同的模塊是安全的。
process.memoryUsage()
返回node進程的內存使用情況的對象
process.nextTick(callback[,...args])
process.nextTick()
方法將callback
添加到“next tick 隊列”。一旦當前事件輪詢隊列的任務全部完成,在next tick 隊列中的所有callback 會被依次調用
process.pid
返回進程的PID
process.platform
process.platform屬性返回字符串,標識Node.js進程運行其上的操作系統平臺。
process.ppid
返回當前父進程的進程ID
process.release
返回node的相關信息
{
name: 'node',
lts: 'Argon',
sourceUrl: 'https://nodejs.org/download/release/v4.4.5/node-v4.4.5.tar.gz',
headersUrl: 'https://nodejs.org/download/release/v4.4.5/node-v4.4.5-headers.tar.gz',
libUrl: 'https://nodejs.org/download/release/v4.4.5/win-x64/node.lib'
}
process.send(message[,sendHandle[,option]],callback])
如果node進程是通過IPC通信產生的,那么process.send()可以與父進程通信,發送消息
process.setegid(id)
process.setegid()
方法為進程設置有效的用戶組ID。(請看 setegid(2)
.) id
可以傳一個數值ID或傳一個用戶組名稱字符串。如果傳了后者的話,會解析成一個相關的數值ID, 解析的時候,這個方法方法是阻塞的。
process.seteuid(id)
process.seteuid()
方法為進程設置有效的用戶ID。(請看 seteuid(2)
.) id
可以傳一個數值ID或傳一個用戶名字符串。如果傳了特定的用戶名字符串,會解析成一個相關的數值ID, 解析的時候,這個方法方法是阻塞的。
process.setgid(id)
process.setgid() 為進程方法設置組ID. (查看setgid(2).) 可給id參數傳一個數值ID或字符串名。
process.stderr
process.stder
返回連接到stderr(fd 2)的流
process.stdin
process.stdin
屬性返回連接到 stdin
(fd 0
)的流。 它是一個net.Socket
(它是一個Duplex流),除非 fd 0
指向一個文件,在這種情況下它是一個Readable流。
process.stdin.setEncoding('utf8');
process.stdin.on('readable', () => {
const chunk = process.stdin.read();
if (chunk !== null) {
process.stdout.write(`data: ${chunk}`);
}
});
process.stdin.on('end', () => {
process.stdout.write('end');
});
process.stdout
process.stdout
屬性返回連接到 stdout
(fd 1
)的流。 它是一個net.Socket
(它是一個Duplex流), 除非 fd 1
指向一個文件,在這種情況下它是一個[可寫][]流。
例1: 將輸入流數據輸出到輸出流,即輸出到終端。
process.stdin.pipe(process.stdout);
process.throwDeprecation
屬性表示--throw-deprecation
標記是否被設置到當前Node進程上
process.title
process.title 屬性用于獲取或設置當前進程在ps命令中顯示的進程名字
process.umask([mask])
process.umask()方法用于返回或設置Node.js進程的默認創建文件的權限掩碼。子進程從父進程繼承這個掩碼。 不傳參數時,默認返回當前掩碼,如果傳遞了參數,創建文件掩碼就被設置為參數值,并且返回之前的掩碼
const newmask = 0o022;
const oldmask = process.umask(newmask);
console.log(
`Changed umask from ${oldmask.toString(8)} to ${newmask.toString(8)}`
);
process.uptime
process.uptime()
方法返回當前 Node.js 進程運行時間秒長
process.version()
process.version 屬性返回Node.js的版本信息。
process.versions
process.versions屬性返回一個對象,此對象列出了Node.js和其依賴的版本信息。 process.versions.modules表明了當前ABI版本,此版本會隨著一個C++API變化而增加。 Node.js會拒絕加載模塊,如果這些模塊使用一個不同ABI版本的模塊進行編譯。