node之process模塊

process --進程

process對象是一個全局對象,他提供當前Node.js進程相關的有關信息,以及控制當前Nodejs進程,因為是全局變量,所以不需要require

process 事件

process對象是EventEmitter的實例

beforeExit事件

NodeEventLoop為空時,并且沒有額外的工作被添加進來,事件beforeExit會被觸發。正常情況下,如果沒有額外的工作被添加EventLoopNodejs進程會結束,但是如果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 錯誤類型,一個resolvereject
  • 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()

  • warning <string> | <Error> 發出的警告。

  • 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])

  • pid <number> 進程ID
  • signal <string> | <number> 將發送的信號,類型為string或number。默認為'SIGTERM'

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.mainprocess.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版本的模塊進行編譯。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容