摘要:是一個全局變量,對象的屬性。的源碼啟動進程,評估時返回函數失敗。調用監聽器回調函數時會將的值作為唯一參數傳入。信號列表詳見標準的信號名,如等。返回一個對象,描述了進程所用的內存狀況,單位為字節。一旦當前事件循環結束,調用回調函數。
process是一個全局變量,global對象的屬性。
它的作用是描述當前Node.js進程狀態的對象,提供了一個與操作系統的簡單接口。通常在你寫本地命令程序的時候,process就會經常用到,下面說說process對象的一些常用的成員方法。
exit : 當進程準備退出時觸發
process.on("exit", function(code) { setTimeout(function(){ console.log("該代碼不會執行。") }) console.log("退出碼為:" + code) }) console.log("程序執行結束")
退出狀態碼
1 Uncaught Fatal Exception
有未捕獲異常,并且沒有被域或 uncaughtException 處理函數處理。
2 Unused
保留
3 Internal JavaScript Parse Error
JavaScript的源碼啟動 Node 進程時引起解析錯誤。非常罕見,僅會在開發 Node 時才會有。
4 Internal JavaScript Evaluation Failure
JavaScript 的源碼啟動 Node 進程,評估時返回函數失敗。非常罕見,僅會在開發 Node 時才會有。
5 Fatal Error
V8 里致命的不可恢復的錯誤。通常會打印到 stderr ,內容為: FATAL ERROR
6 Non-function Internal Exception Handler
未捕獲異常,內部異常處理函數不知為何設置為on-function,并且不能被調用。
7 Internal Exception Handler Run-Time Failure
未捕獲的異常, 并且異常處理函數處理時自己拋出了異常。例如,如果 process.on("uncaughtException") 或 domain.on("error") 拋出了異常。
8 Unused
保留
9 Invalid Argument
可能是給了未知的參數,或者給的參數沒有值。
10 Internal JavaScript Run-Time Failure
JavaScript的源碼啟動 Node 進程時拋出錯誤,非常罕見,僅會在開發 Node 時才會有。
12 Invalid Debug Argument
設置了參數--debug 和/或 --debug-brk,但是選擇了錯誤端口。
128 Signal Exits
如果 Node 接收到致命信號,比如SIGKILL 或 SIGHUP,那么退出代碼就是128 加信號代碼。這是標準的 Unix 做法,退出信號代碼放在高位。
beforeExit : 當 Node.js 清空其事件循環并且沒有其他工作要安排時,會觸發 "beforeExit" 事件。 通常,Node.js 進程將在沒有調度工作時退出,但是在 "beforeExit" 事件上注冊的監聽器可以進行異步調用,從而導致 Node.js 進程繼續。
調用監聽器回調函數時會將 process.exitCode 的值作為唯一參數傳入。
對于導致顯式終止的條件,不會觸發 "beforeExit" 事件,例如調用 process.exit() 或未捕獲的異常。
除非打算安排額外的工作,否則不應將 "beforeExit" 用作 "exit" 事件的替代方案。
process.on("beforeExit", function(code) { setTimeout(function(){ console.log("該代碼會一直執行下去。") }) console.log("退出碼為:" + code) }) console.log("程序執行結束")
事件上注冊的監聽器可以進行異步調用,從而導致 Node.js 進程繼續。這就是這段代碼為什么不會停止的原因呢。
uncaughtException: 當一個異常冒泡回到事件循環,觸發這個事件。如果給異常添加了監視器,默認當操作(打印堆棧信息并推出)就不會發生。
我們來寫一個例子
process.on("uncaughtException",err => { console.log(err + "捕獲異常") }) let a = 1 console.log(b) //打印一個為定義堆變量b
結果
Signal事件::當進程接收到信號時就觸發。信號列表詳見標準的 POSIX 信號名,如 SIGINT、SIGUSR1 等。
process屬性
1 stdout
標準輸出流。
2 stderr
標準錯誤流。
3 stdin
標準輸入流。
4 argv
argv 屬性返回一個數組,由命令行執行腳本時的各個參數組成。它的第一個成員總是node,第二個成員是腳本文件名,其余成員是腳本文件的參數。
5 execPath
返回執行當前腳本的 Node 二進制文件的絕對路徑。
6 execArgv
返回一個數組,成員是命令行下執行腳本時,在Node可執行文件與腳本文件之間的命令行參數。
7 env
返回一個對象,成員為當前 shell 的環境變量
8 exitCode
進程退出時的代碼,如果進程優通過 process.exit() 退出,不需要指定退出碼。
9 version
Node 的版本,比如v0.10.18。
10 versions
一個屬性,包含了 node 的版本和依賴.
11 config
一個包含用來編譯當前 node 執行文件的 javascript 配置選項的對象。它與運行 ./configure 腳本生成的 "config.gypi" 文件相同。
12 pid
當前進程的進程號。
13 title
進程名,默認值為"node",可以自定義該值。
14 arch
當前 CPU 的架構:"arm"、"ia32" 或者 "x64"。
15 platform
運行程序所在的平臺系統 "darwin", "freebsd", "linux", "sunos" 或 "win32"
16 mainModule
require.main 的備選方法。不同點,如果主模塊在運行時改變,require.main可能會繼續返回老的模塊。可以認為,這兩者引用了同一個模塊。
例子
//輸出到終端 process.stdout.write("Hello World" + " ") // 通過參數讀取 process.argv.forEach((val,index,array)=> { console.log(index+ ":" + val) }) // 獲取執行路徑 console.log(process.execPath) // 平臺信息 console.log(process.platform)
process提供了很多有用的屬性,可以查看api逐個了解一下。
Process還有很多游泳的方法,便于我們更好的控制系統的交互:
1 abort()
這將導致 node 觸發 abort 事件。會讓 node 退出并生成一個核心文件。
2 chdir(directory)
改變當前工作進程的目錄,如果操作失敗拋出異常。
3 cwd()
返回當前進程的工作目錄
4 exit([code])
使用指定的 code 結束進程。如果忽略,將會使用 code 0。
5 getgid()
獲取進程的群組標識(參見 getgid(2))。獲取到得時群組的數字 id,而不是名字。
注意:這個函數僅在 POSIX 平臺上可用(例如,非Windows 和 Android)。
6 setgid(id)
設置進程的群組標識(參見 setgid(2))。可以接收數字 ID 或者群組名。如果指定了群組名,會阻塞等待解析為數字 ID 。
注意:這個函數僅在 POSIX 平臺上可用(例如,非Windows 和 Android)。
7 getuid()
獲取進程的用戶標識(參見 getuid(2))。這是數字的用戶 id,不是用戶名。
注意:這個函數僅在 POSIX 平臺上可用(例如,非Windows 和 Android)。
8 setuid(id)
設置進程的用戶標識(參見setuid(2))。接收數字 ID或字符串名字。果指定了群組名,會阻塞等待解析為數字 ID 。
注意:這個函數僅在 POSIX 平臺上可用(例如,非Windows 和 Android)。
9 getgroups()
返回進程的群組 iD 數組。POSIX 系統沒有保證一定有,但是 node.js 保證有。
注意:這個函數僅在 POSIX 平臺上可用(例如,非Windows 和 Android)。
10 setgroups(groups)
設置進程的群組 ID。這是授權操作,所以你需要有 root 權限,或者有 CAP_SETGID 能力。
注意:這個函數僅在 POSIX 平臺上可用(例如,非Windows 和 Android)。
11 initgroups(user, extra_group)
讀取 /etc/group ,并初始化群組訪問列表,使用成員所在的所有群組。這是授權操作,所以你需要有 root 權限,或者有 CAP_SETGID 能力。
注意:這個函數僅在 POSIX 平臺上可用(例如,非Windows 和 Android)。
12 kill(pid[, signal])
發送信號給進程. pid 是進程id,并且 signal 是發送的信號的字符串描述。信號名是字符串,比如 "SIGINT" 或 "SIGHUP"。如果忽略,信號會是 "SIGTERM"。
13 memoryUsage()
返回一個對象,描述了 Node 進程所用的內存狀況,單位為字節。
14 nextTick(callback)
一旦當前事件循環結束,調用回調函數。
15 umask([mask])
設置或讀取進程文件的掩碼。子進程從父進程繼承掩碼。如果mask 參數有效,返回舊的掩碼。否則,返回當前掩碼。
16 uptime()
返回 Node 已經運行的秒數。
17 hrtime()
返回當前進程的高分辨時間,形式為 [seconds, nanoseconds]數組。它是相對于過去的任意事件。該值與日期無關,因此不受時鐘漂移的影響。主要用途是可以通過精確的時間間隔,來衡量程序的性能。
你可以將之前的結果傳遞給當前的 process.hrtime() ,會返回兩者間的時間差,用來基準和測量時間間隔。
// 輸出當前目錄 console.log("當前目錄: " + process.cwd()); // 輸出當前版本 console.log("當前版本: " + process.version); // 輸出內存使用情況 console.log(process.memoryUsage());
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/104432.html
摘要:注很多以前的源碼分析文章中,所寫的第一個執行的文件代碼為,但這個文件在中已被移除,并被拆解為了等其他下的文件,為正文作為第一段被執行的代碼,它的歷史使命免不了就是進行一些環境和全局變量的初始化工作。 大家可能會好奇,在 Node.js 啟動后,第一個執行的 JavaScript 文件會是哪個?它具體又會干些什么事? 一步步來看,翻開 Node.js 的源碼,不難看出,入口文件在 src...
摘要:公司的項目需要多城市部署,不同城市接口地址相關服務地址都會不同同時,還需要實現控制不同城市部分功能開啟關閉。所以,我們將不同城市差異化配置單獨使用一個配置文件整合,代碼中再通過讀取配置文件來實現上述需求。 公司的項目需要多城市部署,不同城市接口地址、相關服務地址都會不同;同時,還需要實現控制不同城市部分功能開啟/關閉。這樣一來,每次不同城市發包需要修改的地方就會比較多且分散,這樣就很容...
摘要:而標準庫中的是不安全的,用戶腳本可以輕易突破沙箱環境,獲取主程序的上述代碼在執行時,程序在第二行就直接退出,虛擬機環境中的代碼逃逸,獲得了主線程的變量,并調用,造成主程序非正常退出。 NPM酷庫,每天兩分鐘,了解一個流行NPM庫。 今天我們要了解的庫是 vm2,則是一個Node.js 官方 vm 庫的替代品,主要解決了安全問題。 不安全的vm 在Node.js官方標準庫中有一個vm庫,...
摘要:階段是事件循環的第一階段習慣上往往都會設置數將回調函數添加到事件循環的階段的隊列中等待執行。 后端知識點總結——NODE.JS(高級) 1.Node入門: 什么是: 針對網絡應用開發的平臺主要特征: 基于Google的JavaScript運行時引擎V8 擴展了Node標準類庫: TCP,同步或異步文件管理,HTTP 為什么使用Node: 可以在服務器端運行js: 現有前端團隊可直...
閱讀 2016·2021-11-12 10:36
閱讀 1865·2021-11-09 09:49
閱讀 2591·2021-11-04 16:12
閱讀 1144·2021-10-09 09:57
閱讀 3235·2019-08-29 17:24
閱讀 1909·2019-08-29 15:12
閱讀 1272·2019-08-29 14:07
閱讀 1285·2019-08-29 12:53