الفرق بين المراجعتين لصفحة: «Node.js/process»

من موسوعة حسوب
الجزء الأخير من الصفحة
ط استبدال النص - '\[\[تصنيف:(.*)\]\]' ب'{{SUBPAGENAME}}'
 
(12 مراجعة متوسطة بواسطة مستخدمين اثنين آخرين غير معروضة)
سطر 1: سطر 1:
<noinclude>{{DISPLAYTITLE:الكائن Process}}</noinclude>
<noinclude>{{DISPLAYTITLE:الكائن Process}}</noinclude>
يكون الكائن process عامًا (global) والذي يزود معلومات عن عملية Node.js الحالية ورقابةً عليها، كونه كائنًا عامًا فهو متوافر دومًا لتطبيقات Node.js دون استخدام ()require.
يكون الكائن <code>process</code> عامًا (<code>global</code>) والذي يزود معلومات عن عملية Node.js الحالية ورقابةً عليها، كونه كائنًا عامًا فهو متوافر دومًا لتطبيقات Node.js دون استخدام <code>()require</code>.


== أحداث Process ==
==أحداث Process==
الكائن process هو نسخة من EventEmitter.
الكائن <code>process</code> هو نسخة من [[Node.js/events#.D8.A7.D9.84.D8.B5.D9.86.D9.81: EventEmitter|EventEmitter]].


=== الحدث 'beforeExit' ===
=== الحدث <code>'beforeExit'</code> ===
أُضيف في الإصدار: 0.11.12.
أُضيف في الإصدار: 0.11.12.


يُطلَق الحدث 'beforeExit' عندما تفرغ Node.js من حلقة الأحداث (event loop) ولا يوجد عمل إضافي لجدولته. بشكل طبيعي، عملية Node.js سوف تنتهي عندما لا يكون هناك عمل مجدولٌ، لكن المُنصِت المسجِّل لحدث 'beforeExit' يمكن أن يعمل استدعاءات غير متزامنة، وبذلك يسبب استمرار عملية Node.js .
يُطلَق الحدث <code>'beforeExit'</code> عندما تفرغ Node.js من حلقة الأحداث (event loop) ولا يوجد عمل إضافي لجدولته. بشكل طبيعي، عملية Node.js سوف تنتهي عندما لا يكون هناك عمل مجدولٌ، لكن المُنصِت المسجِّل لحدث <code>'beforeExit'</code> يمكن أن يعمل استدعاءات غير متزامنة، وبذلك يسبب استمرار عملية Node.js .


تُستدعى دالة رد نداء المنصت مع قيمة process.exitCode المُمررة كوسيط وحيد.
تُستدعى دالة رد نداء المنصت مع قيمة [[Node.js/process#process.exitCode|process.exitCode]] المُمررة كوسيط وحيد.


لا يُطلَق الحدث 'beforeExit' لأجل حالات تسبب إنهاء صريح، مثل استدعاء ()process.exit أو استثناءات غير مُلتقطة.
لا يُطلَق الحدث <code>'beforeExit'</code> لأجل حالات تسبب إنهاء صريح، مثل استدعاء [[Node.js/process#process.exit.28.5Bcode.E2.80.8E.5D.E2.80.8E.29.E2.80.8E|()process.exit]] أو استثناءات غير مُلتقطة.


لا ينبغي أن يُستخدم 'beforeExit' كبديل للحدث 'exit' إلّا إذا كان القصد هو جدولة عمل إضافي.
لا ينبغي أن يُستخدم 'beforeExit' كبديل للحدث <code>'exit'</code> إلّا إذا كان القصد هو جدولة عمل إضافي.
 
===الحدث <code>'disconnect'</code>===
=== الحدث 'disconnect' ===
أُضيف في الإصدار: 0.7.7.
أُضيف في الإصدار: 0.7.7.


إذا وُلِّدت عملية Node.js عبر قناة الاتصالات ما بين العمليات IPC (انظر توثيق Child Process و Cluster)، سوف يُطلَق الحدث 'disconnect' عندما تُغلق قناة IPC.
إذا وُلِّدت عملية Node.js عبر قناة الاتصالات ما بين العمليات IPC (انظر توثيق [[Node.js/child process|Child Process]] و Cluster)، سوف يُطلَق الحدث <code>'disconnect'</code> عندما تُغلق قناة IPC.
 
===الحدث <code>'exit'</code>===
=== الحدث 'exit' ===
أُضيف في الإصدار: 0.1.7.
أُضيف في الإصدار: 0.1.7.
* code‏ ‎<integer>‎
*<code>code</code>‏ [[JavaScript/Number|<integer>]]
يُطلَق الحدث 'exit' عندما تكون عملية Node.js على وشك الخروج كنتيجة لأحد أمرين:
يُطلَق الحدث <code>'exit'</code> عندما تكون عملية Node.js على وشك الخروج كنتيجة لأحد أمرين:
* استدعاء التابع ()process.exit بشكل صريح؛
*استدعاء التابع <code>()process.exit</code> بشكل صريح؛
* لم تعد تحوي حلقة أحداث Node.js أي عمل إضافي ليُنجز.
*لم تعد تحوي حلقة أحداث Node.js أي عمل إضافي ليُنجز.
لا توجد طريقة لمنع خروج حلقة الأحداث في هذه النقطة، وحالما ينتهي تنفيذ كل مُنصتات 'exit' سوف تنتهي عملية Node.js.
لا توجد طريقة لمنع خروج حلقة الأحداث في هذه النقطة، وحالما ينتهي تنفيذ كل مُنصتات <code>'exit'</code> سوف تنتهي عملية Node.js.


تُستدعى دالة رد النداء مع حالة الخروج؛ إمّا بخاصية process.exitCode أو بوسيط exitCode المُمرر للتابع process.exit(‎)‎.<syntaxhighlight lang="javascript">
تُستدعى دالة رد النداء مع حالة الخروج؛ إمّا بخاصية [[Node.js/process#process.exitCode|process.exitCode]] أو بوسيط <code>exitCode</code> المُمرر للتابع [[Node.js/process#process.exit.28.5Bcode.E2.80.8E.5D.E2.80.8E.29.E2.80.8E|process.exit(‎)‎]].<syntaxhighlight lang="javascript">
process.on('exit', (code) => {
process.on('exit', (code) => {
   console.log(`About to exit with code: ${code}`);
   console.log(`About to exit with code: ${code}`);
});
});


</syntaxhighlight>دوال المُنصت يجب أن تُنجِز عمليات متزامنة فقط. سوف تنتهي عملية Node.js مباشرةً بعد استدعاء مُنصتات الحدث 'exit' متسببًة بتجاهل أي عمل إضافي بقي في طابور حلقة الأحداث. في المثال التالي لن يُنفَّذ ما ضمن الدالة setTimeout:<syntaxhighlight lang="javascript">
</syntaxhighlight>دوال المُنصت يجب أن تُنجِز عمليات متزامنة فقط. سوف تنتهي عملية Node.js مباشرةً بعد استدعاء مُنصتات الحدث <code>'exit'</code> متسببًة بتجاهل أي عمل إضافي بقي في طابور حلقة الأحداث. في المثال التالي لن يُنفَّذ ما ضمن الدالة setTimeout:<syntaxhighlight lang="javascript">
process.on('exit', (code) => {
process.on('exit', (code) => {
   setTimeout(() => {
   setTimeout(() => {
سطر 41: سطر 39:
});
});
</syntaxhighlight>
</syntaxhighlight>
 
===الحدث 'message'===
=== الحدث 'message' ===
أُضيف في الإصدار: 0.5.10.
أُضيف في الإصدار: 0.5.10.
* message‏ ‎<Object> | <boolean> | <number> | <string> | <null>‎: كائن JASON مُحلل نحويًا أو قيمة أولية متسلسلة (serializable primitive value).
*<code>message</code>‏ [[JavaScript/Object|<Object>]] | [[JavaScript/Boolean|<boolean>]] | [[JavaScript/Number|<number>]] | [[JavaScript/String|<string>]] | [[JavaScript/null|<null>]]‎: كائن JASON مُحلل نحويًا أو قيمة أولية متسلسلة (serializable primitive value).


* sendHandle‏ <net.Server> | <net.Socket>: كائن net.Server أو net.Socket أو undefined.
*<code>sendHandle</code>‏ ‎‎[[Node.js/net#.D8.A7.D9.84.D8.B5.D9.86.D9.81 net.Server|<‎net.Server‎>]] ‎| ‎[[Node.js/net#.D8.A7.D9.84.D8.B5.D9.86.D9.81 net.Socket|<net.Socket‎‎>]]‎ : كائن [[Node.js/net#.D8.A7.D9.84.D8.B5.D9.86.D9.81 net.Server|net.Server]] أو [[Node.js/net#.D8.A7.D9.84.D8.B5.D9.86.D9.81 net.Socket|net.Socket]] أو undefined.
إذا وُلِّدت عملية Node.js عبر قناة الاتصالات ما بين العمليات IPC (انظر توثيق Child Process و Cluster)، يُطلِق الحدث 'message' حالما تُستقبل الرسالة المُرسلة بواسطة العملية الأب باستخدام ()childprocess.send من قبل العملية الابن.
إذا وُلِّدت عملية Node.js عبر قناة الاتصالات ما بين العمليات IPC (انظر توثيق [[Node.js/child process|Child Process]] و [[Node.js/cluster|Cluster]])، يُطلِق الحدث <code>'message'</code> حالما تُستقبل الرسالة المُرسلة بواسطة العملية الأب باستخدام [[Node.js/child process#subprocess.send.28message.5B.2C sendHandle.5B.2C options.5D.5D.5B.2C callback.5D.29.E2.80.8E|()childprocess.send]] من قبل العملية الابن.


تمر الرسالة عبر مراحل التسلسل والتحليل النحوي، لذا قد لا تكون الرسالة الناتجة مثل الأصل الذي أُرسِل.
تمر الرسالة عبر مراحل التسلسل والتحليل النحوي، لذا قد لا تكون الرسالة الناتجة مثل الأصل الذي أُرسِل.
 
===الحدث 'rejectionHandled'===
=== الحدث 'rejectionHandled' ===
أُضيف في الإصدار: 1.4.1.
أُضيف في الإصدار: 1.4.1.
* promise‏ ‏<Promise>: الوعد المُعالج المتأخر.
*<code>promise</code>‏[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise <Promise>]: الوعد المُعالج المتأخر.
يُطلَق الحدث 'rejectionHandled' كلما رُفض الوعد Promise وأُرفق بمُعالج الأخطاء (على سبيل المثال، باستخدام ()promise.catch) متأخرةً عن حلقة أحداث Node.js بدور واحد.
يُطلَق الحدث <code>'rejectionHandled'</code> كلما رُفض الوعد <code>Promise</code> وأُرفق بمُعالج الأخطاء (على سبيل المثال، باستخدام [[Node.js/Promise#catch|()promise.catch]]) متأخرةً عن حلقة أحداث Node.js بدور واحد.


سيكون الكائن Promise مُطلَقًا سابقًا في الحدث 'unhandledRejection'، لكن خلال دورة المعالجة حصل على مُعالِج الرفض.
سيكون الكائن <code>Promise</code> مُطلَقًا سابقًا في الحدث <code>'unhandledRejection'</code>، لكن خلال دورة المعالجة حصل على مُعالِج الرفض.


لا يوجد دليل على مستوى عالي لأجل سلسلة Promise التي ستُعالج فيها المرفوضات دائمًا، كونها أصلاً غير متزامنة بطبيعتها، فيمكن أن يُعالج رفض Promise في نقطة مستقبلية في الزمن- ربما (المُعالجة) متأخرةً بكثير عن دور حلقة الأحداث الذي يأخذه حدث 'unhandledRejection' ليُطلق.
لا يوجد دليل على مستوى عالي لأجل سلسلة <code>Promise</code> التي ستُعالج فيها المرفوضات دائمًا، كونها أصلاً غير متزامنة بطبيعتها، فيمكن أن يُعالج رفض <code>Promise</code> في نقطة مستقبلية في الزمن- ربما (المُعالجة) متأخرةً بكثير عن دور حلقة الأحداث الذي يأخذه حدث <code>'unhandledRejection'</code> ليُطلق.


طريقة ثانية للتعبير عن ذلك، غير شبيهة بالشيفرة المتزامنة و حيث يوجد لائحة متزايدة دومًا من الاستثناءات غير المُعالجة، في الوعود Promises يمكن أن يكون هناك لائحة متزايدة-و-متناقصة من الرفض غير المُعَالج.
طريقة ثانية للتعبير عن ذلك، غير شبيهة بالشيفرة المتزامنة و حيث يوجد لائحة متزايدة دومًا من الاستثناءات غير المُعالجة، في الوعود Promises يمكن أن يكون هناك لائحة متزايدة-و-متناقصة من الرفض غير المُعَالج.


في الشيفرة المتزامنة، يُطلَق الحدث 'uncaughtException' عندما تزداد لائحة الاستثناءات غير المعالجة.
في الشيفرة المتزامنة، يُطلَق الحدث <code>'uncaughtException'</code> عندما تزداد لائحة الاستثناءات غير المعالجة.


في الشيفرة غير المتزامنة يُطلَق الحدث 'unhandledRejection' عندما تزداد لائحة المرفوضات غير المُعالجة، ويُطلَق الحدث 'rejectionHandled' عندما تتناقص لائحة المرفوضات غير المُعالجة.<syntaxhighlight lang="javascript">
في الشيفرة غير المتزامنة يُطلَق الحدث <code>'unhandledRejection'</code> عندما تزداد لائحة المرفوضات غير المُعالجة، ويُطلَق الحدث <code>'rejectionHandled'</code> عندما تتناقص لائحة المرفوضات غير المُعالجة.<syntaxhighlight lang="javascript">
const unhandledRejections = new Map();
const unhandledRejections = new Map();
process.on('unhandledRejection', (reason, promise) => {
process.on('unhandledRejection', (reason, promise) => {
سطر 72: سطر 68:
   unhandledRejections.delete(promise);
   unhandledRejections.delete(promise);
});
});
</syntaxhighlight>في هذا المثال، سوف تزداد Map (خريطة) unhandledRejections وتتناقص بمرور الوقت، عاكسةً المرفوضات التي بدأت غير مُعالجة ثم أصبحت مُعالجة، من الممكن تسجيل مثل هذه الأخطاء في سجل أخطاء، إمّا دوريًا (والذي يبدو الأفضل من أجل التطبيقات طويلة التشغيل)أو عند خروج العملية (والذي يبدو الأنسب للبرامج النصية scripts).
</syntaxhighlight>في هذا المثال، سوف تزداد <code>Map</code> (خريطة) <code>unhandledRejections</code> وتتناقص بمرور الوقت، عاكسةً المرفوضات التي بدأت غير مُعالجة ثم أصبحت مُعالجة، من الممكن تسجيل مثل هذه الأخطاء في سجل أخطاء، إمّا دوريًا (والذي يبدو الأفضل من أجل التطبيقات طويلة التشغيل)أو عند خروج العملية (والذي يبدو الأنسب للبرامج النصية scripts).
 
===الحدث <code>'uncaughtException'</code>===
=== الحدث 'uncaughtException' ===
أُضيف في الإصدار: 0.1.18.
أُضيف في الإصدار: 0.1.18.


يُطلق الحدث 'uncaughtException'  عندما تصعد استثناءات JavaScript غير المُلتقطة إلى حلقة الأحداث (event loop) في Node.js. بشكل افتراضي، تعالج Node.js مثل هذه الاستثناءات بطباعة التتبع التكديسي (stack trace) إلى مجرى الخطأ القياسي، stderr والخروج من العملية مع حالة الخروج 1. متجاوزةً أي تهيئة سابقة للخاصية process.exitCode. إضافة معالج للحدث 'uncaughtException' يعيد تعريف سلوكه الافتراضي. قد تُغيِّر أنت أيضًا الخاصية process.exitCode في معالج 'uncaughtException' مما سيؤدي إلى إنهاء العملية مع حالة الخروج المُحدَّدة، وإذا لم يوجد مثل هذا المعالج فسوف تخرج العملية مع حالة الخروج 0.
يُطلق الحدث <code>'uncaughtException'</code>  عندما تصعد استثناءات JavaScript غير المُلتقطة إلى حلقة الأحداث (event loop) في Node.js. بشكل افتراضي، تعالج Node.js مثل هذه الاستثناءات بطباعة التتبع التكديسي (stack trace) إلى مجرى الخطأ القياسي، <code>stderr</code> والخروج من العملية مع حالة الخروج 1. متجاوزةً أي تهيئة سابقة للخاصية [[Node.js/process#process.exitCode|process.exitCode]]. إضافة معالج للحدث <code>'uncaughtException'</code> يعيد تعريف سلوكه الافتراضي. قد تُغيِّر أنت أيضًا الخاصية [[Node.js/process#process.exitCode|process.exitCode]] في معالج <code>'uncaughtException'</code> مما سيؤدي إلى إنهاء العملية مع حالة الخروج المُحدَّدة، وإذا لم يوجد مثل هذا المعالج فسوف تخرج العملية مع حالة الخروج 0.


يُستدعى تابع المنصت مع الكائن Error المُمرر كوسيط وحيد.<syntaxhighlight lang="javascript">
يُستدعى تابع المنصت مع الكائن <code>Error</code> المُمرر كوسيط وحيد.<syntaxhighlight lang="javascript">
process.on('uncaughtException', (err) => {
process.on('uncaughtException', (err) => {
   fs.writeSync(1, `Caught exception: ${err}\n`);
   fs.writeSync(1, `Caught exception: ${err}\n`);
سطر 92: سطر 87:
console.log('This will not run.');
console.log('This will not run.');
</syntaxhighlight>
</syntaxhighlight>
 
====تحذير: استخدام <code>'uncaughtException'</code> بشكل صحيح====
==== تحذير: استخدام 'uncaughtException' بشكل صحيح ====
لاحظ أنّ <code>'uncaughtException'</code> هو آلية خام لمعالجة الاستثناء ويُعتمد استخدامها فقط كحل أخير. لا ينبغي أن يستخدم هذا الحدث كبديل لآلية <code>On Error Resume Next</code>. الاستثناءات غير المعالجة الموروثة تعني أن التطبيق في حالة غير مُعرّفة. السعي لاستئناف شيفرة التطبيق بدون الاستعادة الصحيحة من الاستثناء قد تسبب أمور إضافية طارئة ولا يمكن التنبؤ بها.
لاحظ أنّ 'uncaughtException' هو آلية خام لمعالجة الاستثناء ويُعتمد استخدامها فقط كحل أخير. لا ينبغي أن يستخدم هذا الحدث كبديل لآلية On Error Resume Next. الاستثناءات غير المعالجة الموروثة تعني أن التطبيق في حالة غير مُعرّفة. السعي لاستئناف شيفرة التطبيق بدون الاستعادة الصحيحة من الاستثناء قد تسبب أمور إضافية طارئة ولا يمكن التنبؤ بها.


الاستثناءات المرمية من داخل مُعالج الأحداث لا يمكن التقاطها، عوضًا عن ذلك ستنتهي العملية بحالة خروج غير صفرية وسوف يُطبع نص تتبع المكدس. هذا من أجل تفادي التعاودية اللا متناهية.
الاستثناءات المرمية من داخل مُعالج الأحداث لا يمكن التقاطها، عوضًا عن ذلك ستنتهي العملية بحالة خروج غير صفرية وسوف يُطبع نص تتبع المكدس. هذا من أجل تفادي التعاودية اللا متناهية.
سطر 100: سطر 94:
محاولة الاستئناف الطبيعي بعد الاستثناء غير المُلتقط يمكن أن تكون شبيهة بسحب كبل الطاقة عند تحديث الحاسوب- تسعة مرات من عشرة لن يحصل شيء- لكن في المرة العاشرة، سيصبح النظام تالفًا.
محاولة الاستئناف الطبيعي بعد الاستثناء غير المُلتقط يمكن أن تكون شبيهة بسحب كبل الطاقة عند تحديث الحاسوب- تسعة مرات من عشرة لن يحصل شيء- لكن في المرة العاشرة، سيصبح النظام تالفًا.


الاستخدام الصحيح للحدث 'uncaughtException' هو إجراء تنظيف متزامن للموارد المحجوزة (على سبيل المثال، واصفات الملفات، المُعالجات/المقابض، ...إلخ.) قبل إيقاف تشغيل العملية. ليس من الآمن استئناف عملية عادية بعد 'uncaughtException'.
الاستخدام الصحيح للحدث <code>'uncaughtException'</code> هو إجراء تنظيف متزامن للموارد المحجوزة (على سبيل المثال، واصفات الملفات، المُعالجات/المقابض، ...إلخ.) قبل إيقاف تشغيل العملية. '''ليس من الآمن استئناف عملية عادية بعد <code>'uncaughtException'</code>'''.


لإعادة تشغيل تطبيق معطّل بطريقة أكثر موثوقيةً، سواءً كان 'uncaughtException' مُطلقًا أو لا، ينبغي توظيف مراقب خارجي في عملية منفصلة لكشف فشل التطبيق والاستعادة أو إعادة التشغيل حسب الحاجة.
لإعادة تشغيل تطبيق معطّل بطريقة أكثر موثوقيةً، سواءً كان <code>'uncaughtException'</code> مُطلقًا أو لا، ينبغي توظيف مراقب خارجي في عملية منفصلة لكشف فشل التطبيق والاستعادة أو إعادة التشغيل حسب الحاجة.
 
===الحدث: <code>'unhandledRejection'</code>===
=== الحدث: 'unhandledRejection' ===
سجل التغييرات
سجل التغييرات
{| class="wikitable"
{| class="wikitable"
سطر 111: سطر 104:
|-
|-
|7.0.0.
|7.0.0.
|أُهمِلَت مرفوضات Promise غير المُعالجة.
|أُهمِلَت مرفوضات <code>Promise</code> غير المُعالجة.
|-
|-
|6.6.0.
|6.6.0.
|مرفوضات Promise غير المُعالجة سوف تبعث الآن تحذير process warning.
|مرفوضات <code>Promise</code> غير المُعالجة سوف تبعث الآن تحذير process warning.
|-
|-
|1.4.1.
|1.4.1.
|أُضيف في الإصدار 1.4.1.
|أُضيف في الإصدار 1.4.1.
|}
|}يُبعث الحدث <code>'unhandledRejection'</code> كلّما رُفض وعد  <code>Promise</code> ولم يرفق معالج أخطاء بالوعد خلال دور من حلقة الأحداث. عند البرمجة مع الوعود، تُغلّف الاستثناءات "ك وعود مرفوضة". المرفوضات يمكن أن تُلتقط وتُعالج باستخدام [[Node.js/Promise#catch|()promise.catch]] وتُنشر خلال سلسلة <code>Promise</code>. الحدث <code>'unhandledRejection'</code> مفيد من أجل كشف و حفظ مسار الوعود التي رُفضت والتي لم تُعالَج مرفوضاتها بعد.
يُبعث الحدث 'unhandledRejection' كلّما رُفض وعد  Promise ولم يرفق معالج أخطاء بالوعد خلال دور من حلقة الأحداث. عند البرمجة مع الوعود، تُغلّف الاستثناءات "ك وعود مرفوضة". المرفوضات يمكن أن تُلتقط وتُعالج باستخدام ()promise.catch وتُنشر خلال سلسلة Promise. الحدث 'unhandledRejection' مفيد من أجل كشف و حفظ مسار الوعود التي رُفضت والتي لم تُعالَج مرفوضاتها بعد.


تُستدعى دالة المُنصت مع الوسائط التالية:
تُستدعى دالة المُنصت مع الوسائط التالية:
* reason‏ <Error> | <any>: الكائن الذي رُفض الوعد معه (عادةً ما يكون كائن Error)
*<code>reason‏</code> ‏‎[[JavaScript/Error|<‎Error‎>]] ‎| ‎[[JavaScript|<any‎>]]‎: الكائن الذي رُفض الوعد معه (عادةً ما يكون كائن [[JavaScript/Error|Error]])


* p :الوعد Promise الذي رُفِض
*<code>p</code> :الوعد <code>Promise</code> الذي رُفِض
<syntaxhighlight lang="javascript">
<syntaxhighlight lang="javascript">
process.on('unhandledRejection', (reason, p) => {
process.on('unhandledRejection', (reason, p) => {
سطر 135: سطر 127:
}); // `.catch()` أو `.then()`لا يوجد
}); // `.catch()` أو `.then()`لا يوجد


</syntaxhighlight>ستؤدي الشيفرة الآتية إلى إطلاق الحدث 'unhandledRejection':<syntaxhighlight lang="javascript">
</syntaxhighlight>ستؤدي الشيفرة الآتية إلى إطلاق الحدث <code>'unhandledRejection'</code>:<syntaxhighlight lang="javascript">
function SomeResource() {
function SomeResource() {
// مبدئيًا يضبط الحالة المُحمّلة إلى وعد مرفوض
// مبدئيًا يضبط الحالة المُحمّلة إلى وعد مرفوض
سطر 144: سطر 136:
//لدور واحد على الأقل resource.loaded‎ على catch أو .then ‎لايوجد
//لدور واحد على الأقل resource.loaded‎ على catch أو .then ‎لايوجد


</syntaxhighlight>في حالة هذا المثال، يمكن تتبع الرفض كخطأ مطوِّر(developer error) كما تكون الحالة النموذجية لأحداث 'unhandledRejection' الأخرى. لعنونة مثل هذا الفشل، يمكن أن يُرفق معالج ‎‏‎‎‎‏‎.‎catch‎(() => { }‎)‎‎‎‎‎‎‎ غير العملياتي
</syntaxhighlight>في حالة هذا المثال، يمكن تتبع الرفض كخطأ مطوِّر(developer error) كما تكون الحالة النموذجية لأحداث <code>'unhandledRejection'</code> الأخرى. لعنونة مثل هذا الفشل، يمكن أن يُرفق معالج [[node.js/Promise|‎‏‎‎‎‏‎.‎catch‎(() => { }‎)‎‎‎‎‎‎‎]] غير العملياتي


(non-operational ‎.‎catch‎(() => { }‎)‎‎‎‎‎‎‎‎) ب resource.loaded ، والذي سيمنع الحدث 'unhandledRejection' من الإطلاق. بدلًا من ذلك، يمكن أن يُستخدم الحدث 'rejectionHandled'.
(non-operational ‎.‎catch‎(() => { }‎)‎‎‎‎‎‎‎‎) ب <code>resource.loaded</code> ، والذي سيمنع الحدث <code>'unhandledRejection'</code> من الإطلاق. بدلًا من ذلك، يمكن أن يُستخدم الحدث [[Node.js/process#.D8.A7.D9.84.D8.AD.D8.AF.D8.AB .27rejectionHandled.27|'rejectionHandled']].
 
===الحدث <code>'warning'</code>===
=== الحدث 'warning' ===
أُضيف في الإصدار: 6.0.0.
أُضيف في الإصدار: 6.0.0.
* warning‏ <Error>
*<code>warning‏</code> [[JavaScript/Error|<Error>]]
الخصائص الرئيسة/المفتاحية للتحذير warning هي:
الخصائص الرئيسة/المفتاحية للتحذير warning هي:
* name‏ <string>: اسم التحذير. القيمة الافتراضية: 'Warning'.
*<code>name‏</code> [[JavaScript/String|<string>]]: اسم التحذير. '''القيمة الافتراضية:'''<code>'Warning'</code> .


* message‏ <string>: توصيف مزوّد من قبل النظام عن التحذير.
*<code>message</code>‏ [[JavaScript/String|<string>]]: توصيف مزوّد من قبل النظام عن التحذير.


* stack‏ <string>: المسار المُكدَّس/التتبع التكديسي للمكان في الشيفرة حيث أُصدر التحذير.
*<code>stack</code>‏ [[JavaScript/String|<string>]]: المسار المُكدَّس/التتبع التكديسي للمكان في الشيفرة حيث أُصدر التحذير.
يُطلق الحدث 'warning' كلّما أطلق Node.js تحذير عملية (process warning).
يُطلق الحدث <code>'warning'</code> كلّما أطلق Node.js تحذير عملية (process warning).


تحذير العملية (process warning) شبيهٌ بالخطأ في أنّه يوصّف ظروفًا استثنائيةً والتي تسترعي انتباه المستخدم. لكن التحذيرات ليست جزءًا من تدفق معالجة الأخطاء الطبيعي في Node.js و JavaScript. تستطيع Node.js إطلاق تحذيرات كلّما كشفت عن ممارسات شيفرة سيئة يمكن أن تقود إلى أداء تطبيق دون المستوى الأمثل، أو أخطاء، أو ثغرات أمنية.<syntaxhighlight lang="javascript">
تحذير العملية (process warning) شبيهٌ بالخطأ في أنّه يوصّف ظروفًا استثنائيةً والتي تسترعي انتباه المستخدم. لكن التحذيرات ليست جزءًا من تدفق معالجة الأخطاء الطبيعي في Node.js و JavaScript. تستطيع Node.js إطلاق تحذيرات كلّما كشفت عن ممارسات شيفرة سيئة يمكن أن تقود إلى أداء تطبيق دون المستوى الأمثل، أو أخطاء، أو ثغرات أمنية.<syntaxhighlight lang="javascript">
سطر 165: سطر 156:
   console.warn(warning.stack);  //التتبع التكديسي‎ يطبع
   console.warn(warning.stack);  //التتبع التكديسي‎ يطبع
});
});
</syntaxhighlight>افتراضيًا، سوف تطبع Node.js تحذيرات عمليات (process warning) إلى مجرى الخطأ القياسي stderr. يمكن أن يُستخدم خيار سطر الأوامر ‎-‎‎-‎no-‎warnings‎ لكتم مخرجات console (وحدة التحكم) الافتراضية لكن الحدث سيبقى مُطلقًا من قبل الكائن process.
</syntaxhighlight>افتراضيًا، سوف تطبع Node.js تحذيرات عمليات (process warning) إلى مجرى الخطأ القياسي <code>stderr</code>. يمكن أن يُستخدم خيار سطر الأوامر <code>‎-‎‎-‎no-‎warnings</code>‎ لكتم مخرجات console (وحدة التحكم) الافتراضية لكن الحدث <code>'warning'</code> سيبقى مُطلقًا من قبل الكائن <code>process</code>.


يوضّح المثال التالي التحذير الذي يُطبع إلى مجرى الخطأ القياسي stderr عندما تُضاف الكثير من المُنصتات إلى حدث ما:<syntaxhighlight lang="javascript">
يوضّح المثال التالي التحذير الذي يُطبع إلى مجرى الخطأ القياسي <code>stderr</code> عندما تُضاف الكثير من المُنصتات إلى حدث ما:<syntaxhighlight lang="javascript">
$ node
$ node
> events.defaultMaxListeners = 1;
> events.defaultMaxListeners = 1;
سطر 174: سطر 165:
> (node:38638) MaxListenersExceededWarning: Possible EventEmitter memory leak
> (node:38638) MaxListenersExceededWarning: Possible EventEmitter memory leak
detected. 2 foo listeners added. Use emitter.setMaxListeners() to increase limit
detected. 2 foo listeners added. Use emitter.setMaxListeners() to increase limit
</syntaxhighlight>بالمقابل، يطفئ المثال التالي خرج التحذير الافتراضي ويضيف مُعالج مخصص لحدث 'warning':<syntaxhighlight lang="javascript">
</syntaxhighlight>بالمقابل، يطفئ المثال التالي خرج التحذير الافتراضي ويضيف مُعالج مخصص لحدث <code>'warning'</code>:<syntaxhighlight lang="javascript">
$ node --no-warnings
$ node --no-warnings
> const p = process.on('warning', (warning) => console.warn('Do not do that!'));
> const p = process.on('warning', (warning) => console.warn('Do not do that!'));
سطر 182: سطر 173:
> Do not do that!
> Do not do that!


</syntaxhighlight>يمكن أن يُستخدم خيار سطر الأوامر ‎-‎-‎trace-‎warnings‎ للحصول على خرج وحدة التحكم console الافتراضي للتحذيرات متضمنًا المسار المكدَّس/التتبع التكديسي الكامل للتحذير.
</syntaxhighlight>يمكن أن يُستخدم خيار سطر الأوامر <code>‎-‎-‎trace-‎warnings‎</code> للحصول على خرج وحدة التحكم console الافتراضي للتحذيرات متضمنًا المسار المكدَّس/التتبع التكديسي الكامل للتحذير.
 
تشغيل Node.js باستخدام خيار سطر الأوامر ‎-‎-‎throw-‎deprecation‎ سوف يسبب إلقاء تحذيرات مُهملة/منخفضة الأهمية مخصصة (custom deprecation warnings) كاستثناءات.
 
سيسبب استخدام خيار سطر الأوامر ‎-‎-‎trace-‎deprecation‎ طباعة التحذيرات المُهملة المخصصة إلى مجرى الخطأ القياسي stderr مع المسار المكدَّس/التتبع التكديسي.


سوف يكتم استخدام خيار سطر الأوامر ‎-‎-‎no-‎deprecation‎ كل التقارير عن التحذيرات المُهملة المخصصة.
تشغيل Node.js باستخدام خيار سطر الأوامر <code>‎-‎-‎throw-‎deprecation</code>‎ سوف يسبب إلقاء تحذيرات مُهملة/منخفضة الأهمية مخصصة (custom deprecation warnings) كاستثناءات.


ستؤثر خيارات سطر الأوامر ‎*‎-‎deprecation‎ فقط على التحذيرات التي تستخدم الاسم 'DeprecationWarning'
سيسبب استخدام خيار سطر الأوامر <code>--‎trace-‎deprecation‎</code> طباعة التحذيرات المُهملة المخصصة إلى مجرى الخطأ القياسي <code>stderr</code> مع المسار المكدَّس/التتبع التكديسي.


==== إصدار تحذيرات مخصصة ====
سوف يكتم استخدام خيار سطر الأوامر <code>-‎-‎no-‎deprecation</code>‎ كل التقارير عن التحذيرات المُهملة المخصصة.
انظر التابع process.emitWarnin‎g()لإصدار تحذيرات مُخصصة أو خاصة بالتطبيق.


=== أحداث الإشارات (Signal Events) ===
ستؤثر خيارات سطر الأوامر ‎<code>*‎-‎deprecation</code>‎ فقط على التحذيرات التي تستخدم الاسم <code>'DeprecationWarning'</code>
سوف تُطلق أحداث الإشارة عندما تستقبل عملية Node.js إشارةً، رجاءً راجع signal(7)‎ من أجل لائحة أسماء إشارات POSIX (واجهة نظام التشغيل المحمولة لأنظمة يونكس) القياسية مثل 'SIGINT' و 'SIGHUP'  ...إلخ.
====إصدار تحذيرات مخصصة====
انظر التابع [[Node.js/process#process.emitWarning.28warning.5B.2C type.5B.2C code.5D.5D.5B.2C ctor.E2.80.8E.5D.E2.80.8E.29.E2.80.8E|process.emitWarnin‎g()]]‎ لإصدار تحذيرات مُخصصة أو خاصة بالتطبيق.
===أحداث الإشارات (Signal Events)===
سوف تُطلق أحداث الإشارة عندما تستقبل عملية Node.js إشارةً، رجاءً راجع [[signal7|signal(7)‎]] من أجل لائحة أسماء إشارات POSIX (واجهة نظام التشغيل المحمولة لأنظمة يونكس) القياسية مثل '<code>SIGINT</code>' و '<code>SIGHUP</code>'  ...إلخ.


سوف يستقبل مُعالج الإشارة اسم الاشارة ('SIGINT' أو 'SIGTERM' أو ...إلخ.) كأول وسيط.
سوف يستقبل مُعالج الإشارة اسم الاشارة (<code>'SIGINT'</code> أو <code>'SIGTERM'</code> أو ...إلخ.) كأول وسيط.


سيكون اسم كل حدث هو الاسم الشائع للحدث وبحالة الأحرف الكبيرة (مثال 'SIGINT' من أجل إشارات SIGINT).<syntaxhighlight lang="javascript">
سيكون اسم كل حدث هو الاسم الشائع للحدث وبحالة الأحرف الكبيرة (مثال <code>'SIGINT'</code> من أجل إشارات <code>SIGINT</code>).<syntaxhighlight lang="javascript">
// لذلك لن تنتهي العملية stdin بدء القراءة من مجرى الدخل القياسي
// لذلك لن تنتهي العملية stdin بدء القراءة من مجرى الدخل القياسي
process.stdin.resume();
process.stdin.resume();
سطر 216: سطر 205:
process.on('SIGTERM', handle);
process.on('SIGTERM', handle);


</syntaxhighlight>
</syntaxhighlight><span> </span>
* 'SIGUSR1': محجوزة من قبل Node.js من أجل بدء المُنقّح (debugger)، من الممكن تنصيب مُنصت ولكن فعل ذلك قد يؤدي إلى تداخل مع المُنقّح.
*<code>'SIGUSR1'</code>: محجوزة من قبل Node.js من أجل بدء المُنقّح ([[Node.js/debugger|debugger]])، من الممكن تنصيب مُنصت ولكن فعل ذلك قد يؤدي إلى تداخل مع المُنقّح.
* 'SIGTERM' و 'SIGINT': تملك مُعالجات افتراضية على منصات غير ويندوز (أنظمة تشغيل مختلفة عن ويندوز) والتي ستعيد ضبط حالة الطرفية إلى حالتها الافتراضية قبل الخروج (العودة من الصدفة) بحالة خروج تساوي 128 + رقم الإشارة
*<code>'SIGTERM'</code> و <code>'SIGINT'</code>: تملك مُعالجات افتراضية على منصات غير ويندوز (أنظمة تشغيل مختلفة عن ويندوز) والتي ستعيد ضبط حالة الطرفية إلى حالتها الافتراضية قبل الخروج (العودة من الصدفة) بحالة خروج تساوي 128 + رقم الإشارة ‎(‎<code>128‎ +‎ signal‎ number‎</code>)‎‎. إذا كانت إحدى هذه الإشارات تمتلك مُنصتًا مُنصّبًا(موجودًا لتغيير آلية معالجة الإشارة)، سوف يُزال سلوكها الافتراضي (ولن تنتهي عملية Node.js حينئذٍ).
‎(‎128‎ +‎ signal‎ number‎)‎‎. إذا كانت إحدى هذه الإشارات تمتلك مُنصتًا مُنصّبًا(موجودًا لتغيير آلية معالجة الإشارة)، سوف يُزال سلوكها الافتراضي (ولن تنتهي عملية Node.js حينئذٍ).
 
* 'SIGPIPE': مُهملة افتراضيًا، يمكن أن تملك مُنصتًا مُنصبًا (موجوداً لمعالجة الإشارة بآلية خاصة).
* <code>'SIGPIPE'</code>: مُهملة افتراضيًا، يمكن أن تملك مُنصتًا مُنصبًا (موجوداً لمعالجة الإشارة بآلية خاصة).
* 'SIGHUP': تُولّد في ويندوز عندما تُغلق نافذة الطرفية/وحدة التحكم console، وعلى المنصات الأخرى تحت ظروف شتى مشابهة، انظر signal(7)‎. يمكن أن تملك مُنصتًا منصبًا، ولكن Node.js سوف تُنهى بشكل غير مشروط من قبل ويندوز بعد حوالي 10 ثواني. على منصات غير ويندوز، السلوك الافتراضي للحدث SIGHUP هو إنهاء Node.js، لكن حالما يُنصّب المنصت سوف يُزال سلوكه الافتراضي.
* <code>'SIGHUP'</code>: تُولّد في ويندوز عندما تُغلق نافذة الطرفية/وحدة التحكم console، وعلى المنصات الأخرى تحت ظروف شتى مشابهة، انظر [[(signal(7|signal(7)]]‎. يمكن أن تملك مُنصتًا منصبًا، ولكن Node.js سوف تُنهى بشكل غير مشروط من قبل ويندوز بعد حوالي 10 ثواني. على منصات غير ويندوز، السلوك الافتراضي للحدث <code>SIGHUP</code> هو إنهاء Node.js، لكن حالما يُنصّب المنصت سوف يُزال سلوكه الافتراضي.
* 'SIGTERM': ليست مدعومةً في ويندوز، يمكن الانصات عليها.
* <code>'SIGTERM'</code>: ليست مدعومةً في ويندوز، يمكن الانصات عليها.
* 'SIGINT': مدعومة من قبل الطرفية على جميع المنصات، ويمكن توليدها عادة ب ‎<‎Ctrl>‎+‎C‎ (بالرغم أن ذلك قد يكون قابلًا للضبط)، لا تُولّد عندما يكون النمط الخام للطرفية مفعلاً.
* <code>'SIGINT'</code>: مدعومة من قبل الطرفية على جميع المنصات، ويمكن توليدها عادة ب <code>‎<‎Ctrl>‎+‎C</code>‎ (بالرغم أن ذلك قد يكون قابلًا للضبط)، لا تُولّد عندما يكون النمط الخام للطرفية مفعلاً.
* 'SIGBREAK': تُرسل في ويندوز عندما يُضغط <Ctrl>+<Break>، على منصات غير ويندوز يمكن الاستماع لها، ولكن لا يوجد طريقة لإرسالها أو توليدها.
* <code>'SIGBREAK'</code>: تُرسل في ويندوز عندما يُضغط <code><Ctrl>+<Break></code>، على منصات غير ويندوز يمكن الاستماع لها، ولكن لا يوجد طريقة لإرسالها أو توليدها.
* 'SIGWINCH': تُرسل عندما يُغيّر حجم الطرفية/وحدة التحكم console في الويندوز، سوف يحصل هذا فقط في الكتابة على وحدة التحكم عندما يُحرّك المؤشر، أو عندما تكون tty (الطرفية الوهمية التي ينشئها نظام التشغيل) القابلة للقراءة مُستخدمة في الوضع الخام.
* <code>'SIGWINCH</code>': تُرسل عندما يُغيّر حجم الطرفية/وحدة التحكم console في الويندوز، سوف يحصل هذا فقط في الكتابة على وحدة التحكم عندما يُحرّك المؤشر، أو عندما تكون tty (الطرفية الوهمية التي ينشئها نظام التشغيل) القابلة للقراءة مُستخدمة في الوضع الخام.
* 'SIGKILL': لا يمكن أن تمتلك مُنصتًا مُنصّبًا (لمعالجة الإشارة بآلية خاصة)، سوف تُنهي Node.js بشكل غير مشروط على جميع المنصات.
* <code>'SIGKILL'</code>: لا يمكن أن تمتلك مُنصتًا مُنصّبًا (لمعالجة الإشارة بآلية خاصة)، سوف تُنهي Node.js بشكل غير مشروط على جميع المنصات.
* 'SIGSTOP': لا يمكن أن تمتلك مُنصتًا مُنصّبًا (لمعالجة الإشارة بآلية خاصة).
* <code>'SIGSTOP'</code>: لا يمكن أن تمتلك مُنصتًا مُنصّبًا (لمعالجة الإشارة بآلية خاصة).
* 'SIGBUS 'و 'SIGFPE' و'SIGSEGV' و 'SIGILL': عندما لا تُثار صناعيًا باستخدام kill(‎2‎‎)‎، تترك العملية بشكل متأصل في حالة ليس آمنًا منها محاولة استدعاء مُنصتات JS، القيام بذلك قد يقود إلى تعليق العملية في حلقة لا نهائية، بما أن المُنصتات المرفقة باستخدام process.on(‎)‎ تُستدعى بشكل غير متزامن فهي غير قادرة على تصحيح المشكلة الأساسية.
* <code>'SIGBUS '</code>و <code>'SIGFPE'</code> و<code>'SIGSEGV'</code> و <code>'SIGILL'</code>: عندما لا تُثار صناعيًا باستخدام [[kill(‎2‎‎)]]‎، تترك العملية بشكل متأصل في حالة ليس آمنًا منها محاولة استدعاء مُنصتات JS، القيام بذلك قد يقود إلى تعليق العملية في حلقة لا نهائية، بما أن المُنصتات المرفقة باستخدام <code>process.on(‎)‎</code> تُستدعى بشكل غير متزامن فهي غير قادرة على تصحيح المشكلة الأساسية.
لا يدعم ويندوز إرسال الإشارات، لكن Node.js توفر بعض المحاكاة مع التوابع process.kill(‎)‎ و subprocess.kill(‎)‎. إرسال الإشارة 0 يمكن أن يُستخدم لاختبار وجود العملية. إرسال SIGINT و SIGTERM و SIGKILL يسبب انهاءً غير مشروطٍ للعملية الهدف.
لا يدعم ويندوز إرسال الإشارات، لكن Node.js توفر بعض المحاكاة مع التوابع [[Node.js/process#process.kill.28pid.5B.2C signal.E2.80.8E.5D.E2.80.8E.29.E2.80.8E|process.kill(‎)]]‎ و [[Node.js/child process#subprocess.kill.28.5Bsignal.5D.29.E2.80.8E|subprocess.kill(‎)]]‎. إرسال الإشارة <code>0</code> يمكن أن يُستخدم لاختبار وجود العملية. إرسال <code>SIGINT</code> و <code>SIGTERM</code> و <code>SIGKILL</code> يسبب انهاءً غير مشروطٍ للعملية الهدف.


== process.abort(‎)‎ ==
== <code>process.abort(‎)‎</code> ==
أُضيف في الإصدار: 0.7.0.
أُضيف في الإصدار: 0.7.0.


يسبب التابع process.abort(‎‎)‎ خروج عملية Node.js مباشرة وتوليد ملف نواة (core file).
يسبب التابع <code>process.abort(‎‎)‎</code> خروج عملية Node.js مباشرة وتوليد ملف نواة (core file).


هذه الميزة ليست متوفرة في خيوط Worker.
هذه الميزة ليست متوفرة في خيوط [[Node.js/Worker|Worker]].


== Process.arch ==
== <code>Process.arch</code> ==
أُضيفت في الإصدار: 0.5.0.
أُضيفت في الإصدار: 0.5.0.
* <string>
* [[JavaScript/String|<string>]]
تعيد الخاصية process.arch سلسلة نصية مُعرِّفةً البنية المعمارية لوحدة المعالجة المركزية CPU لنظام التشغيل والذي بُنيت فيه Node.js الثنائية.
تعيد الخاصية <code>process.arch</code> سلسلة نصية مُعرِّفةً البنية المعمارية لوحدة المعالجة المركزية CPU لنظام التشغيل والذي بُنيت فيه Node.js الثنائية.


القيم الحالية الممكنة هي:
القيم الحالية الممكنة هي:


'arm'، و'arm64'، و'ia32'، و'mips'، و'mipsel'، و'ppc'، و'ppc64'، و's390'، و's390x'، و'x32'، و'x64'.<syntaxhighlight lang="javascript">
<code>'arm'</code>، و<code>'arm64'</code>، و<code>'ia32'</code>، و<code>'mips'</code>، و<code>'mipsel'</code>، و<code>'ppc'</code>، و<code>'ppc64'</code>، و<code>'s390'</code>، و<code>'s390x'</code>، و<code>'x32'</code>، و<code>'x64'</code>.<syntaxhighlight lang="javascript">
console.log(`This processor architecture is ${process.arch}`);
console.log(`This processor architecture is ${process.arch}`);
</syntaxhighlight>
</syntaxhighlight>


== process.argv ==
== <code>process.argv</code> ==
أُضيفت في الإصدار: 0.1.27.
أُضيفت في الإصدار: 0.1.27.
* <string[]‎>
* [[JavaScript/String|<string[]‎>]]
تعيد الخاصية process.argv مصفوفةً متضمنةً على وسطاء سطر الأوامر المُمررة عندما شُغّلت عملية Node.js. سيكون العنصر الأول process.execPath. انظر process.argv0 إذا كان هناك حاجة للوصول إلى القيمة الأصلية للوسيط argv[‎0‎]‎. سوف يكون العنصر الثاني مسار إلى ملف JavaScript قيد التنفيذ. العناصر المتبقية ستكون أي وسطاء إضافية لسطر الأوامر.
تعيد الخاصية <code>process.argv</code> مصفوفةً متضمنةً على وسطاء سطر الأوامر المُمررة عندما شُغّلت عملية Node.js. سيكون العنصر الأول process.execPath. انظر <code>process.argv0</code> إذا كان هناك حاجة للوصول إلى القيمة الأصلية للوسيط <code>argv[‎0‎]</code>‎. سوف يكون العنصر الثاني مسار إلى ملف JavaScript قيد التنفيذ. العناصر المتبقية ستكون أي وسطاء إضافية لسطر الأوامر.


على سبيل المثال، بافتراض السكربت التالي باسم process-args.js:<syntaxhighlight lang="javascript">
على سبيل المثال، بافتراض السكربت التالي باسم <code>process-args.js</code>:<syntaxhighlight lang="javascript">
//يطبع process.argv
//يطبع process.argv
process.argv.forEach((val, index) => {
process.argv.forEach((val, index) => {
سطر 269: سطر 258:
</syntaxhighlight>
</syntaxhighlight>


== process.argv0 ==
== <code>process.argv0</code> ==
أُضيفت في الإصدار: 6.4.0.
أُضيفت في الإصدار: 6.4.0.
* <string>
* [[JavaScript/String|<string>]]
تُخزِّن الخاصية process.argv0 نسخة قابلة للقراءة فقط من القيم الأصلية للوسيط argv[‎0‎]‎ مُمررةً عندما تبدأ Node.js.<syntaxhighlight lang="javascript">
تُخزِّن الخاصية <code>process.argv0</code> نسخة قابلة للقراءة فقط من القيم الأصلية للوسيط <code>argv[‎0‎]‎</code> مُمررةً عندما تبدأ Node.js.<syntaxhighlight lang="javascript">
$ bash -c 'exec -a customArgv0 ./node'
$ bash -c 'exec -a customArgv0 ./node'
> process.argv[0]
> process.argv[0]
سطر 280: سطر 269:
</syntaxhighlight>
</syntaxhighlight>


== Process.channel ==
== <code>Process.channel</code> ==
أُضيفت في الإصدار: 7.1.0.
أُضيفت في الإصدار: 7.1.0.
* <Object>
* [[JavaScript/Object|<Object>]]
إذا وُلِّدت عملية Node.js عبر قناة الاتصالات ما بين العمليات IPC (انظر توثيق العملية الابن Child Process) تكون الخاصية process.channel مرجعًا لقناة الاتصال ما بين العمليات IPC. إذا لم توجد قناة IPC، تكون هذه الخاصية غير معرّفة undefined.
إذا وُلِّدت عملية Node.js عبر قناة الاتصالات ما بين العمليات IPC (انظر توثيق العملية الابن Child Process) تكون الخاصية <code>process.channel</code> مرجعًا لقناة الاتصال ما بين العمليات IPC. إذا لم توجد قناة IPC، تكون هذه الخاصية غير معرّفة <code>undefined</code>.


== process.chdir(directory‎)‎ ==
== <code>process.chdir(directory‎)‎</code> ==
أُضيف في الإصدار: 0.1.17.  
أُضيف في الإصدار: 0.1.17.  
* directory <string>‎
* <code>directory</code> [[JavaScript/String|<string>‎]]
يغير التابع process.chdir‎(‎)‎ مجلد العمل الحالي لعملية Node.js أو يرمي استثناءً إذا فشل ذلك (على سبيل المثال، إذا كان directory المحدد غير موجود).<syntaxhighlight lang="javascript">
يغير التابع <code>process.chdir‎(‎)</code>‎ مجلد العمل الحالي لعملية Node.js أو يرمي استثناءً إذا فشل ذلك (على سبيل المثال، إذا كان <code>directory</code> المحدد غير موجود).<syntaxhighlight lang="javascript">
console.log(`Starting directory: ${process.cwd()}`);
console.log(`Starting directory: ${process.cwd()}`);
try {
try {
سطر 297: سطر 286:
}
}


</syntaxhighlight>هذه الميزة غير متوافرة في خيوط Worker‏‎.‏‎‎
</syntaxhighlight>هذه الميزة غير متوافرة في خيوط [[node.js/worker|Worker]]‏‎.‏‎‎


== process.config ==
== <code>process.config</code> ==
أُضيفت في الإصدار: 0.7.7.
أُضيفت في الإصدار: 0.7.7.
* <Object>
* [[JavaScript/Object|<Object>]]
تعيد الخاصية process.config كائن Object حاوي على تمثيل JavaScript لخيارات التهيئة المستخدمة لبناء الملف التنفيدي لبرمجية Node.js الحالية القابلة للتنفيذ. وهذا مثل ملف config.gypi الذي يُنتج عند تشغيل سكربت الضبط (أي السكربت ‎/‎‎configure‎.).
تعيد الخاصية <code>process.config</code> كائن <code>Object</code> حاوي على تمثيل JavaScript لخيارات التهيئة المستخدمة لبناء الملف التنفيدي لبرمجية Node.js الحالية القابلة للتنفيذ. وهذا مثل ملف <code>config.gypi</code> الذي يُنتج عند تشغيل سكربت الضبط (أي السكربت <code>‎/‎‎configure‎.</code>).


يبدو مثال عن المخرجات المحتملة مثل:<syntaxhighlight lang="javascript">
يبدو مثال عن المخرجات المحتملة مثل:<syntaxhighlight lang="javascript">
سطر 330: سطر 319:
}
}


</syntaxhighlight>الخاصية process.config ليست للقراءة فقط وهناك وحدات موجودة في في النظام الذي توفره Node.js تُعرَّف للتوسّع أو التعديل أو تبديل كلي لقيمة process.config.
</syntaxhighlight>الخاصية <code>process.config</code> ليست للقراءة فقط وهناك وحدات موجودة في في النظام الذي توفره Node.js تُعرَّف للتوسّع أو التعديل أو تبديل كلي لقيمة <code>process.config</code>.


== process.connected ==
== <code>process.connected</code> ==
أُضيفت في الإصدار: 0.7.2.
أُضيفت في الإصدار: 0.7.2.
* <boolean>
* [[JavaScript/Boolean|<boolean>]]
إذا وُلِّدت عملية Node.js عبر قناة الاتصالات ما بين العمليات IPC (انظر توثيق Child Process وCluster) سوف تعيد الخاصية process.connected القيمة true طالما كانت قناة IPC متصلة وستعيد القيمة false بعد أن يُستدعى التابع process.disconnect(‎)‎.
إذا وُلِّدت عملية Node.js عبر قناة الاتصالات ما بين العمليات IPC (انظر توثيق [[Node.js/child process|Child Process]] و<nowiki/>[[Node.js/cluster|Cluster]]) سوف تعيد الخاصية <code>process.connected</code> القيمة <code>true</code> طالما كانت قناة IPC متصلة وستعيد القيمة <code>false</code> بعد أن يُستدعى التابع <code>process.disconnect(‎)‎</code>.


<span> </span>
<span> </span>


حالما تصبح قيمة process.connected خطأ (false)، لا يعود من الممكن إرسال رسائل عبر قناة IPC باستخدام التابع process.send(‎)‎.
حالما تصبح قيمة <code>process.connected</code> خطأ (<code>false</code>)، لا يعود من الممكن إرسال رسائل عبر قناة IPC باستخدام التابع <code>process.send(‎)</code>‎.


== process.cpuUsage([previousValue‎]‎)‎ ==
== <code>process.cpuUsage([previousValue‎]‎)‎</code> ==
أُضيف في الإصدار: 6.1.0.
أُضيف في الإصدار: 6.1.0.
* previousValue‏ ‎:<Object>‎ قيمة سابقة مُعادة من استدعاء التابع process.cpuUsage(‎)‎.
* <code>previousValue‏</code> ‎:[[JavaScript/Object|<Object>]]‎ قيمة سابقة مُعادة من استدعاء التابع <code>process.cpuUsage(‎)</code>‎.
* القيمة المعادة: <Object>
* القيمة المعادة: [[JavaScript/Object|<Object>]]
** user‏ ‎<integer>‎
** <code>user</code>‏ [[JavaScript/Number|‎<integer>]]
** system‏ ‎<integer>‎
** <code>system</code>‏ [[JavaScript/Number|<integer>]]
يعيد التابع process.cpuUsage(‎)‎ وقت المُستخدِم ووقت نظام وحدة المعالجة المركزية CPU المُستخدم في العملية الحالية، في كائن مع الخاصيتين user و system، حيث قيمهما هي قيم بالميكرو ثانية (مليون من الثانية). تقيس هذه القيم الوقت المُنفق في شيفرة المستخدم والنظام على الترتيب، وقد تنتهي بكونه (الوقت) أكبر من الوقت الفعلي المنقضي إذا كانت وحدة معالجة مركزية متعددة النوى تنجز العمل لهذه العملية.
يعيد التابع <code>process.cpuUsage(‎)</code>‎ وقت المُستخدِم ووقت نظام وحدة المعالجة المركزية CPU المُستخدم في العملية الحالية، في كائن مع الخاصيتين <code>user</code> و <code>system</code>، حيث قيمهما هي قيم بالميكرو ثانية (مليون من الثانية). تقيس هذه القيم الوقت المُنفق في شيفرة المستخدم والنظام على الترتيب، وقد تنتهي بكونه (الوقت) أكبر من الوقت الفعلي المنقضي إذا كانت وحدة معالجة مركزية متعددة النوى تنجز العمل لهذه العملية.


يمكن أن تُمرر نتيجة استدعاء سابق للتابع process.cpuUsage(‎)‎ كوسيط للدالة، للحصول على قراءة مختلفة.<syntaxhighlight lang="javascript">
يمكن أن تُمرر نتيجة استدعاء سابق للتابع <code>process.cpuUsage(‎)</code>‎ كوسيط للدالة، للحصول على قراءة مختلفة.<syntaxhighlight lang="javascript">
const startUsage = process.cpuUsage();
const startUsage = process.cpuUsage();
// { user: 38579, system: 6986 }
// { user: 38579, system: 6986 }
سطر 365: سطر 354:
</syntaxhighlight>
</syntaxhighlight>


== process.cwd(‎)‎ ==
== <code>process.cwd(‎)</code>‎ ==
أُضيف في الإصدار: 0.1.8.
أُضيف في الإصدار: 0.1.8.
* القيمة المعادة: <string>
* القيمة المعادة: [[JavaScript/String|<string>]]
يعيد التابع process.cwd(‎)‎ مجلد العمل الحالي لعملية Node.js.<syntaxhighlight lang="javascript">
يعيد التابع <code>process.cwd(‎)‎</code> مجلد العمل الحالي لعملية Node.js.<syntaxhighlight lang="javascript">
console.log(`Current directory: ${process.cwd()}`);
console.log(`Current directory: ${process.cwd()}`);
</syntaxhighlight>
</syntaxhighlight>


== process.debugPort ==
== <code>process.debugPort</code> ==
أُضيفت في الإصدار: 0.7.2.
أُضيفت في الإصدار: 0.7.2.
* <number>
* [[JavaScript/Number|<number>]]
المَنفذ المستخدم من قبل المُنقّح (debugger) الخاص ب Node.js عندما يُفعّل.<syntaxhighlight lang="javascript">
المَنفذ المستخدم من قبل المُنقّح (debugger) الخاص ب Node.js عندما يُفعّل.<syntaxhighlight lang="javascript">
process.debugPort = 5858;
process.debugPort = 5858;
</syntaxhighlight>
</syntaxhighlight>


== process.disconnect(‎)‎ ==
== <code>process.disconnect(‎)‎</code> ==
أُضيف في الإصدار: 0.7.2.
أُضيف في الإصدار: 0.7.2.


إذا وُلِّدت عملية Node.js عبر قناة الاتصالات ما بين العمليات IPC (انظر توثيق Child Process و Cluster)، سيُغلِق التابع process.disconnect(‎)‎ قناة IPC للعملية الأب، سامحةً للعملية الابن بالانتهاء بأمان حالما لا تتواجد أي اتصالات أخرى تبقيها حية.
إذا وُلِّدت عملية Node.js عبر قناة الاتصالات ما بين العمليات IPC (انظر توثيق [[Node.js/child process|Child Process]] و [[Node.js/cluster|Cluster]])، سيُغلِق التابع <code>process.disconnect(‎)‎</code> قناة IPC للعملية الأب، سامحةً للعملية الابن بالانتهاء بأمان حالما لا تتواجد أي اتصالات أخرى تبقيها حية.


تأثير استدعاء process.disconnect‎(‎‎)‎‎ هو مثل استدعاء العملية الأب للتابع ChildProcess.disconnect(‎)‎.
تأثير استدعاء <code>process.disconnect‎(‎‎)‎‎</code> هو مثل استدعاء العملية الأب للتابع [[Node.js/child process#.D8.A7.D9.84.D8.AA.D8.A7.D8.A8.D8.B9 subprocess.disconnect.28.29.E2.80.8E|ChildProcess.disconnect(‎)]]‎.


إذا كانت عملية Node.js غير مُولَّدة بقناة الاتصال ما بين العمليات IPC، سيكون process.disconnect‎(‎‎)‎‎ غير معرّف undefined.
إذا كانت عملية Node.js غير مُولَّدة بقناة الاتصال ما بين العمليات IPC، سيكون <code>process.disconnect‎(‎‎)</code>‎‎ غير معرّف <code>undefined</code>.


== ‎process.dlopen(module, filename[, flags‎]‎)‎ ==
== <code>‎process.dlopen(module, filename[, flags‎]‎)‎</code> ==
سجل التغييرات
سجل التغييرات


سطر 396: سطر 385:
|-
|-
|9.0.0.
|9.0.0.
|إضافة الدعم للوسيط  flags.
|إضافة الدعم للوسيط  <code>flags</code>.
|-
|-
|0.1.16.
|0.1.16.
|أُضيف في الإصدار 0.1.16.
|أُضيف في الإصدار 0.1.16.
|}
|}
* module‏ ‎<Object>‎
* <code>module</code>‏ [[JavaScript/Object|<Object>]]
* filename‏ <string>
* <code>filename‏</code> [[JavaScript/String|<string>]]
* flags‏ ‎<os.constants.dlopen>‎، القيمة الإفتراضية: os.constants.dlopen.RTLD_LAZY.
* <code>flags‏</code> [[Node.js/os#dlopen Constants|‎<os.constants.dlopen>]]‎، '''القيمة الإفتراضية:''' <code>os.constants.dlopen.RTLD_LAZY</code>.
يسمح التابع process.dlopen(‎)‎ بتحميل الكائنات المُشتركة المحلية ديناميكيًا. إنّه يُستخدم في الأصل من خلال require(‎)‎ من أجل تحميل إضافات ++C، ولا ينبغي أن يُستخدم مباشرة، إلّا في حالات خاصة. بعبارة أخرى، ينبغي تفضيل require(‎)‎ على process.dlopen(‎)‎، مالم تكن هناك أسباب محددة.
يسمح التابع <code>process.dlopen(‎)‎</code> بتحميل الكائنات المُشتركة المحلية ديناميكيًا. إنّه يُستخدم في الأصل من خلال <code>require(‎)‎</code> من أجل تحميل إضافات ++C، ولا ينبغي أن يُستخدم مباشرة، إلّا في حالات خاصة. بعبارة أخرى، ينبغي تفضيل [[Node.js/globals|require(‎)]]‎ على <code>process.dlopen(‎)‎</code>، مالم تكن هناك أسباب محددة.


الوسيط flags هو عدد صحيح يسمح بتحديد سلوك dlopen. انظر توثيق os.constants.dlopen للتفاصيل.
الوسيط <code>flags</code> هو عدد صحيح يسمح بتحديد سلوك dlopen. انظر توثيق [[Node.js/os#dlopen Constants|os.constants.dlopen]] للتفاصيل.


إذا كان هناك أسباب محددة لاستخدام process.dlopen(‎)‎ (على سبيل المثال، لضبط رايات dlopen)، فمن المفيد غالبًا استخدام require.resolve(‎)‎ للبحث عن مسار الوحدة.
إذا كان هناك أسباب محددة لاستخدام <code>process.dlopen(‎)‎</code> (على سبيل المثال، لضبط رايات dlopen)، فمن المفيد غالبًا استخدام [[Node.js/modules#require.28.29.E2.80.8E|require.resolve(‎)]]‎ للبحث عن مسار الوحدة.


هنالك عائق مهم عند استدعاء process.dlopen(‎)‎ هو أن نسخة من الكائن/الصنف module يجب أن تُمرر. سيكون الوصول إلى التوابع المُصدّرة من قبل إضافات C+‎+‎ ممكنًا عبر module.exports.
هنالك عائق مهم عند استدعاء <code>process.dlopen(‎)</code>‎ هو أن نسخة من الكائن/الصنف <code>module</code> يجب أن تُمرر. سيكون الوصول إلى التوابع المُصدّرة من قبل إضافات C+‎+‎ ممكنًا عبر <code>module.exports</code>.


يعرض المثال في الأسفل كيفية تحميل إضافة C+‎+‎. مسماة binding، وتُصدّر كدالة foo. سوف تُحمّل كل الرموز قبل عودة الاستدعاء، عبر تمرير الثابت RTLD_NOW. يُفترَض في هذا المثال أن يكون الثابت RTLD_NOW متوافرًا:<syntaxhighlight lang="javascript">
يعرض المثال في الأسفل كيفية تحميل إضافة C+‎+‎. مسماة <code>binding</code>، وتُصدّر كدالة <code>foo</code>. سوف تُحمّل كل الرموز قبل عودة الاستدعاء، عبر تمرير الثابت <code>RTLD_NOW</code>. يُفترَض في هذا المثال أن يكون الثابت <code>RTLD_NOW</code> متوافرًا:<syntaxhighlight lang="javascript">
const os = require('os');
const os = require('os');
process.dlopen(module, require.resolve('binding'),
process.dlopen(module, require.resolve('binding'),
سطر 419: سطر 408:
</syntaxhighlight>
</syntaxhighlight>


== process.emitWarning(warning[, options]‎)‎ ==
== <code>process.emitWarning(warning[, options]‎)‎</code> ==
أُضيف في الإصدار: 8.0.0.
أُضيف في الإصدار: 8.0.0.
* warning‏ ‎<string> | <Error>‎‎: التحذير الذي سيُطلق
* <code>warning</code>‏ [[JavaScript/String|<string>]] | [[JavaScript/Error|<Error>]]‎‎: التحذير الذي سيُطلق


* options‏ ‎<Object>‎
* <code>options</code>‏ [[JavaScript/Object|‎<Object>]]
** type‏ ‎<string>‎: عندما يكون التحذير warning هو سلسلة نصية String، يكون النوع type هو الاسم المُستخدم لنوع التحذير الذي يُطلق. القيمة الافتراضية: 'Warning'.
** <code>type‏</code> [[JavaScript/String|<string>]]‎: عندما يكون التحذير <code>warning</code> هو سلسلة نصية <code>String</code>، يكون النوع <code>type</code> هو الاسم المُستخدم لنوع التحذير الذي يُطلق. '''القيمة الافتراضية:''' <code>'Warning'</code>.
** code‏ ‎<string>‎: مُعرِّف فريد لنسخة التحذير التي ستُطلق.
** <code>code</code>‏ [[JavaScript/String|<string>]]‎: مُعرِّف فريد لنسخة التحذير التي ستُطلق.
** ctor‏ ‎<Function>‎: عندما يكون warning هو سلسلة نصية، يكون ctor تابع اختياري يُستخدم للحد من المسار التتبع التكديسي المتولد. القيمة الإفتراضية :process.emitWarning.
** <code>ctor</code>‏ [[JavaScript/Function|<Function>]]‎: عندما يكون <code>warning</code> هو سلسلة نصية <code>String</code>، يكون <code>ctor</code> تابع اختياري يُستخدم للحد من المسار التتبع التكديسي المتولد. '''القيمة الإفتراضية:''' <code>process.emitWarning</code>.
** detail‏ ‎<string>‎: نص إضافي ليدرج مع الخطأ.
** <code>detail</code>‏ [[JavaScript/String|<string>]]‎: نص إضافي ليدرج مع الخطأ.
يمكن أن يُستخدم التابع process.emitWarning(‎)‎ لإطلاق تحذيرات عمليات (process warnings) مُحددة التطبيق أو مخصصة. يمكن الإنصات إليها بإضافة معالج إلى حدث 'warning'.<syntaxhighlight lang="javascript">
يمكن أن يُستخدم التابع <code>process.emitWarning(‎)‎</code> لإطلاق تحذيرات عمليات (process warnings) مُحددة التطبيق أو مخصصة. يمكن الإنصات إليها بإضافة معالج إلى حدث [[Node.js/process#.D8.A7.D9.84.D8.AD.D8.AF.D8.AB .27warning.27|'warning']].<syntaxhighlight lang="javascript">
// إطلاق تحذير مع رمز وتفاصيل أخرى
// إطلاق تحذير مع رمز وتفاصيل أخرى
process.emitWarning('Something happened!', {
process.emitWarning('Something happened!', {
سطر 437: سطر 426:
// (node:56338) [MY_WARNING] Warning: Something happened!
// (node:56338) [MY_WARNING] Warning: Something happened!
// This is some additional information هذه بعض المعلومات الإضافية
// This is some additional information هذه بعض المعلومات الإضافية
في هذا المثال، وُلِّد كائن خطأ Error داخليًا من قبل التابع process.emitWarning(‎)‎ و مُرر إلى معالج 'warning'
 
</syntaxhighlight>في هذا المثال، وُلِّد كائن خطأ <code>Error</code> داخليًا من قبل التابع <code>process.emitWarning(‎)</code>‎ و مُرر إلى معالج [[Node.js/process#.D8.A7.D9.84.D8.AD.D8.AF.D8.AB .27warning.27|'warning']]<syntaxhighlight lang="javascript">
process.on('warning', (warning) => {
process.on('warning', (warning) => {
  console.warn(warning.name);   // 'Warning'
 
  console.warn(warning.message); // 'Something happened!'
  console.warn(warning.name);    // 'Warning'
  console.warn(warning.code);   // 'MY_WARNING'
 
  console.warn(warning.stack); //التتبع التكديسي‎
  console.warn(warning.message); // 'Something happened!'
  console.warn(warning.detail); // 'This is some additional information'
 
  console.warn(warning.code);    // 'MY_WARNING'
 
  console.warn(warning.stack);  //التتبع التكديسي‎
 
  console.warn(warning.detail);  // 'This is some additional information'
 
});
});
</syntaxhighlight>إذا مُرر التحذير warning ككائن Error ، يُهمل الوسيط options.


== process.emitWarning(warning[, type[, code]][, ctor‎]‎)‎ ==
 
</syntaxhighlight>
 
إذا مُرر التحذير <code>warning</code> ككائن <code>Error</code> ، يُهمل الوسيط <code>options</code>.
 
== <code>process.emitWarning(warning[, type[, code]][, ctor‎]‎)</code>‎ ==


أُضيف في الإصدار: 6.0.0.
أُضيف في الإصدار: 6.0.0.
* warning‏‎<string> | <Error> ‎‎: التحذير الذي سيُطلق.
* <code>warning</code>‏‎[[JavaScript/String|<string>]] | [[JavaScript/Error|<Error>]] ‎‎: التحذير الذي سيُطلق.
* type‏ ‎<string>‎: عندما يكون التحذير warning سلسلة نصية، يكون type هو الاسم المُستخدم لنوع التحذير الذي يُطلق. القيمة الإفتراضية: 'Warning'
* <code>type</code>‏ [[JavaScript/String|<string>]]‎: عندما يكون التحذير <code>warning</code>  هو سلسلة نصية <code>String</code>، يكون <code>type</code> هو الاسم المُستخدم لنوع التحذير الذي يُطلق. '''القيمة الإفتراضية:''' <code>'Warning'</code>
* code‏ ‎<string>‎: مُعرِّف فريد لنسخة التحذير الذي يُطلق.
* <code>code</code>‏ [[JavaScript/String|<string>]]‎: مُعرِّف فريد لنسخة التحذير الذي يُطلق.


* ctor‏ ‎<Function>‎: عندما يكون التحذير warning سلسلة نصية، يُستخدمctor كتابع اختياري للحد من التتبع التكديسي المتولّد. القيمة الإفتراضية: process.emitWarning.
* <code>ctor</code>‏ [[JavaScript/Function|<Function>]]‎: عندما يكون التحذير <code>warning</code> هو سلسلة نصية <code>String</code>، يُستخدم<code>ctor</code> كتابع اختياري للحد من التتبع التكديسي المتولّد. '''القيمة الإفتراضية:''' <code>process.emitWarning</code>.
يمكن أن يُستخدم التابع process.emitWarning(‎)‎ لإطلاق تحذيرات عمليات (process warnings) محددة التطبيق أو مخصصة. يمكن الإنصات إليها بإضافة معالج إلى حدث 'warning'.<syntaxhighlight lang="javascript">
يمكن أن يُستخدم التابع <code>process.emitWarning(‎)</code>‎ لإطلاق تحذيرات عمليات (process warnings) محددة التطبيق أو مخصصة. يمكن الإنصات إليها بإضافة معالج إلى حدث [[Node.js/process#.D8.A7.D9.84.D8.AD.D8.AF.D8.AB .27warning.27|'warning']].<syntaxhighlight lang="javascript">


//إطلاق تحذير باستخدام سلسلة
//إطلاق تحذير باستخدام سلسلة
سطر 469: سطر 469:
// تطلق: (node:56338) [WARN001] CustomWarning: Something happened!
// تطلق: (node:56338) [WARN001] CustomWarning: Something happened!


</syntaxhighlight>في كل من الأمثلة السابقة، يُولّد كائن Error داخليًا من قبل التابع process.emitWarning(‎)‎ ويُمرر عبرها إلى معالج 'warning'.<syntaxhighlight lang="javascript">
</syntaxhighlight>في كل من الأمثلة السابقة، يُولّد كائن <code>Error</code> داخليًا من قبل التابع <code>process.emitWarning(‎)</code>‎ ويُمرر عبرها إلى معالج [[Node.js/process#.D8.A7.D9.84.D8.AD.D8.AF.D8.AB .27warning.27|'warning']].<syntaxhighlight lang="javascript">
process.on('warning', (warning) => {
process.on('warning', (warning) => {
   console.warn(warning.name);
   console.warn(warning.name);
سطر 476: سطر 476:
   console.warn(warning.stack);
   console.warn(warning.stack);
});
});
</syntaxhighlight>إذا مُرر التحذير warning ككائن Error، سوف يُمرر عبر معالج الحدث 'warning' غير معدلٍ (وسوف تُهمل الوسطاء الإختيارية type و code و ctor):<syntaxhighlight lang="javascript">
</syntaxhighlight>إذا مُرر التحذير <code>warning</code> ككائن <code>Error</code>، سوف يُمرر عبر معالج الحدث <code>'warning'</code> غير معدلٍ (وسوف تُهمل الوسطاء الإختيارية <code>type</code> و <code>code</code> و <code>ctor</code>):<syntaxhighlight lang="javascript">
// Error إطلاق تحذير باستخدام كائن  
// Error إطلاق تحذير باستخدام كائن  
const myWarning = new Error('Something happened!');
const myWarning = new Error('Something happened!');
سطر 487: سطر 487:
//تطلق: (node:56338) [WARN001] CustomWarning: Something happened!
//تطلق: (node:56338) [WARN001] CustomWarning: Something happened!


</syntaxhighlight>يرمى خطأ مطبعي TypeError إذا كان التحذير warning هو أي شيء غير السلسلة النصية أو كائن Error.
</syntaxhighlight>يرمى خطأ مطبعي <code>TypeError</code> إذا كان التحذير <code>warning</code> هو أي شيء غير السلسلة النصية أو كائن <code>Error</code>.


لاحظ أنّه بينما تستخدم تحذيرات العمليات (process warning) كائنات Error، آلية تحذير العمليات ليست بديلة لآلية معالجة الأخطاء العادية.
لاحظ أنّه بينما تستخدم تحذيرات العمليات (process warning) كائنات <code>Error</code>، آلية تحذير العمليات '''ليست''' بديلة لآلية معالجة الأخطاء العادية.


تُنفذ المعالجة الإضافية التالية إذا كان نوع (type) التحذير هو 'DeprecationWarning':
تُنفذ المعالجة الإضافية التالية إذا كان نوع (<code>type</code>) التحذير هو <code>'DeprecationWarning'</code>:
* إذا استُخدِم خيار سطر الأوامر ‎-‎-‎throw‎-‎deprecation‎، سيُلقى التحذير المُهمل كاستثناء بدلًا من إطلاقه كحدث.
* إذا استُخدِم خيار سطر الأوامر <code>‎-‎-‎throw‎-‎deprecation‎</code>، سيُلقى التحذير المُهمل كاستثناء بدلًا من إطلاقه كحدث.
* إذا استُخدِم خيار سطر الأوامر ‎-‎-‎no‎-‎deprecation‎، سيُكبت التحذير المُهمل.
* إذا استُخدِم خيار سطر الأوامر ‎<code>-‎-‎no‎-‎deprecation</code>‎، سيُكبت التحذير المُهمل.
* إذا استُخدم خيار سطر الأوامر ‎-‎-‎trace‎-‎deprecation‎ ، سيُطبَع التحذير المُهمل إلى مجرى الخطأ القياسي stderr مع التتبع التكديسي الكامل.
* إذا استُخدم خيار سطر الأوامر <code>‎-‎-‎trace‎-‎deprecation‎</code> ، سيُطبَع التحذير المُهمل إلى مجرى الخطأ القياسي <code>stderr</code> مع التتبع التكديسي الكامل.


=== تجنب التحذيرات المُكرّرة (Avoiding duplicate warnings) ===
=== تجنب التحذيرات المُكرّرة (Avoiding duplicate warnings) ===
من المستحسن أن تُطلق التحذيرات مرة فقط لكل العملية. لفعل ذلك، يُنصح بوضع التابع emitWarning(‎)‎ بعد اختبارٍ منطقيٍ بسيط كما هو موضح في المثال أدناه:<syntaxhighlight lang="javascript">
من المستحسن أن تُطلق التحذيرات مرة فقط لكل العملية. لفعل ذلك، يُنصح بوضع التابع <code>emitWarning(‎)</code>‎ بعد اختبارٍ منطقيٍ بسيط كما هو موضح في المثال أدناه:<syntaxhighlight lang="javascript">
function emitMyWarning() {
function emitMyWarning() {
   if (!emitMyWarning.warned) {
   if (!emitMyWarning.warned) {
سطر 513: سطر 513:
</syntaxhighlight>
</syntaxhighlight>


== process.env ==
== <code>process.env</code> ==
سجل التغييرات
سجل التغييرات
{| class="wikitable"
{| class="wikitable"
سطر 525: سطر 525:
|أُضيفت في الإصدار 0.1.27
|أُضيفت في الإصدار 0.1.27
|}
|}
* <Object>
* [[JavaScript/Object|<Object>]]
ستعيد الخاصية process.env كائنًا حاويًا على بيئة المستخدم. انظر environ(‎7‎)‎ .
ستعيد الخاصية <code>process.env</code> كائنًا حاويًا على بيئة المستخدم. انظر [[environ(‎7‎)‎]] .


يبدو مثالٌ عن الكائن شبيهًا بالكائن الآتي:
يبدو مثالٌ عن الكائن شبيهًا بالكائن الآتي:
سطر 549: سطر 549:
console.log(process.env.foo);
console.log(process.env.foo);


</syntaxhighlight>إسناد الخاصية process.env سوف يحول القيمة ضمنيًا إلى سلسلة نصية، أُهمل هذا السلوك. سترمي النسخ المستقبلية من Node.js خطأً عندما لا تكون القيمة سلسلة نصية أو عدد أو قيمة منطقية.
</syntaxhighlight>إسناد الخاصية <code>process.env</code> سوف يحول القيمة ضمنيًا إلى سلسلة نصية، '''أُهمل هذا السلوك'''. سترمي النسخ المستقبلية من Node.js خطأً عندما لا تكون القيمة سلسلة نصية أو عدد أو قيمة منطقية.


مثال:<syntaxhighlight lang="javascript">
مثال:<syntaxhighlight lang="javascript">
سطر 559: سطر 559:
// => 'undefined'
// => 'undefined'


</syntaxhighlight>استخدم المعامل delete لحذف خاصية من process.env. مثال:<syntaxhighlight lang="javascript">
</syntaxhighlight>استخدم المعامل <code>delete</code> لحذف خاصية من <code>process.env</code>.  
 
مثال:<syntaxhighlight lang="javascript">
process.env.TEST = 1;
process.env.TEST = 1;
delete process.env.TEST;
delete process.env.TEST;
سطر 570: سطر 572:
console.log(process.env.test);
console.log(process.env.test);
// => 1
// => 1
</syntaxhighlight>الخاصية process.env قابلة للقراءة فقط في خيوط Worker.
</syntaxhighlight>الخاصية <code>process.env</code> قابلة للقراءة فقط في خيوط [[node.js/Worker|Worker]].


== process.execArgv ==
== <code>process.execArgv</code> ==
أُضيفت في الإصدار: 0.7.7.
أُضيفت في الإصدار: 0.7.7.
* ‎<‎string‎[‎]‎>‎‎‎
* [[JavaScript/String|‎<‎string‎[‎]‎>]]‎‎‎
تعيد الخاصية process.execArgv مجموعة من خيارات سطر الأوامر الخاصة ببيئة Node.js والمُمرَّرة عندما تُشغّل عملية Node.js. لا تظهر هذه الخيارات في المصفوفة المُعادة من قبل الخاصية process.argv، ولا تتضمن هذه المصفوفة اسم الملف التنفيذي لبيئة Node.js، ولا اسم السكربت المُشغَّل، ولا أيّ خيارات تلي اسم السكربت. هذه الخيارات مفيدة من أجل توليد عملية ابن بنفس بيئة التنفيذ للعملية الأب.<syntaxhighlight lang="javascript">
تعيد الخاصية <code>process.execArgv</code> مجموعة من خيارات سطر الأوامر الخاصة ببيئة Node.js والمُمرَّرة عندما تُشغّل عملية Node.js. لا تظهر هذه الخيارات في المصفوفة المُعادة من قبل الخاصية process.argv، ولا تتضمن هذه المصفوفة اسم الملف التنفيذي لبيئة Node.js، ولا اسم السكربت المُشغَّل، ولا أيّ خيارات تلي اسم السكربت. هذه الخيارات مفيدة من أجل توليد عملية ابن بنفس بيئة التنفيذ للعملية الأب.<syntaxhighlight lang="javascript">
$ node --harmony script.js --version
$ node --harmony script.js --version


</syntaxhighlight>يُنتِج ما سبق القيمة الآتية المخزّنة في الخاصية process.execArgv:<syntaxhighlight lang="javascript">
</syntaxhighlight>يُنتِج ما سبق القيمة الآتية المخزّنة في الخاصية <code>process.execArgv</code>:<syntaxhighlight lang="javascript">
['--harmony']
['--harmony']
</syntaxhighlight>وفي process.argv:<syntaxhighlight lang="javascript">
</syntaxhighlight>وفي <code>process.argv</code>:<syntaxhighlight lang="javascript">
['/usr/local/bin/node', 'script.js', '--version']
['/usr/local/bin/node', 'script.js', '--version']


</syntaxhighlight>
</syntaxhighlight>


== process.execPath ==
== <code>process.execPath</code> ==
أُضيفت في الإصدار: 0.1.100.
أُضيفت في الإصدار: 0.1.100.
* <string>
* [[JavaScript/String|<string>]]
تعيد الخاصية process.execPath المسار المطلق للملف التنفيذي الذي يبدأ عملية Node.js:<syntaxhighlight lang="javascript">
تعيد الخاصية <code>process.execPath</code> المسار المطلق للملف التنفيذي الذي يبدأ عملية Node.js:<syntaxhighlight lang="javascript">
'/usr/local/bin/node'
'/usr/local/bin/node'
</syntaxhighlight>
</syntaxhighlight>


== process.exit([code‎]‎)‎ ==
== <code>process.exit([code‎]‎)‎</code> ==
أُضيف في الإصدار: 0.1.13.
أُضيف في الإصدار: 0.1.13.
* ‎<integer>‎ code: حالة الخروج. القيمة الإفتراضية :0
* ‎[[JavaScript/Number|<integer>]]<code>code</code>: حالة الخروج. '''القيمة الإفتراضية:''' <code>0</code>
التابع process.exit(‎)‎ يأمر Node.js إنهاء العملية بشكل متزامن مع حالة الخروج code. إذا حُذف code، يستخدم الخروج إمّا حالة النجاح '‎‎success‎‎' وقيمته 0 أو قيمة الخاصية process.exitCode إذا ضُبطت. لن تنتهي Node.js حتى تُستدعى جميع مُنصتات الحدث 'exit'.
التابع <code>process.exit(‎)‎</code> يأمر Node.js إنهاء العملية بشكل متزامن مع حالة الخروج <code>code</code>. إذا حُذف <code>code</code>، يستخدم الخروج إمّا حالة النجاح '‎‎success‎‎' وقيمته <code>0</code> أو قيمة الخاصية <code>process.exitCode</code> إذا ضُبطت. لن تنتهي Node.js حتى تُستدعى جميع مُنصتات الحدث [[Node.js/process#.D8.A7.D9.84.D8.AD.D8.AF.D8.AB .27exit.27|'exit']].


للانهاء مع حالة الفشل 'failure' :<syntaxhighlight lang="javascript">
للانهاء مع حالة الفشل 'failure' :<syntaxhighlight lang="javascript">
process.exit(1);
process.exit(1);
</syntaxhighlight>ينبغي أن ترى الصدفة التي نفّذت Node.js حالة الخروج ‎.‎1
</syntaxhighlight>ينبغي أن ترى الصدفة التي نفّذت Node.js حالة الخروج ‎.<code>‎1</code>


استدعاء process.exit(‎)‎ سيجبر العملية على الانتهاء بأقصى سرعة ممكنة حتى لو بقيت هناك عمليات (operations) غير متزامنة معلّقة ولم تنته بالكامل بعد. متضمنةً عمليات الدخل والخرج I/O إلى process.stdout و process.stderr.
استدعاء <code>process.exit(‎)</code>‎ سيجبر العملية على الانتهاء بأقصى سرعة ممكنة حتى لو بقيت هناك عمليات (operations) غير متزامنة معلّقة ولم تنته بالكامل بعد. متضمنةً عمليات الدخل والخرج I/O إلى <code>process.stdout</code> و <code>process.stderr</code>.


في معظم الحالات، ليس من الضروري فعليًا الاستدعاء الصريح للتابع process.exit(‎)‎. سوف تنتهي عملية Node.js من تلقاء نفسها إذا لم يوجد أي عمل إضافي مُعلّق في حلقة الأحداث. يمكن أن تُضبط الخاصية process.exitCode لتُعلِم العملية أي حالة خروج عليها أن تُستخدَم عندما تنتهي العملية بأمان.
في معظم الحالات، ليس من الضروري فعليًا الاستدعاء الصريح للتابع <code>process.exit(‎)‎</code>. سوف تنتهي عملية Node.js من تلقاء نفسها إذا لم يوجد أي عمل إضافي مُعلّق في حلقة الأحداث. يمكن أن تُضبط الخاصية <code>process.exitCode</code> لتُعلِم العملية أي حالة خروج عليها أن تُستخدَم عندما تنتهي العملية بأمان.


على سبيل المثال، يوضّح المثال التالي سوء استخدام للطريقة process.exit(‎)‎ والذي يمكن أن يقود إلى تقطيع وضياع البيانات المطبوعة إلى مجرى الخرج القياسي stdout.<syntaxhighlight lang="javascript">
على سبيل المثال، يوضّح المثال التالي سوء استخدام للطريقة <code>process.exit(‎)‎</code> والذي يمكن أن يقود إلى تقطيع وضياع البيانات المطبوعة إلى مجرى الخرج القياسي stdout.<syntaxhighlight lang="javascript">
// :هذا مثال على ما *لا* يجب فعله
// :هذا مثال على ما *لا* يجب فعله
if (someConditionNotMet()) {
if (someConditionNotMet()) {
سطر 612: سطر 614:
}
}


</syntaxhighlight>الدافع إلى هذه الإشكالية هو بسبب أنّ الكتابة إلى process.stdout في Node.js تكون أحيانًا غير متزامنة ويمكن أن تحدث خلال عدة وحدات لحلقة أحداث Node.js. لكن استدعاء process.exit(‎)‎ يجبر العملية على الانتهاء قبل أن تُنجز تلك الكتابة الإضافية إلى مجرى الخرج القياسي stdout.
</syntaxhighlight>الدافع إلى هذه الإشكالية هو بسبب أنّ الكتابة إلى <code>process.stdout</code> في Node.js تكون أحيانًا غير متزامنة ويمكن أن تحدث خلال عدة وحدات لحلقة أحداث Node.js. لكن استدعاء <code>process.exit(‎)‎</code> يجبر العملية على الانتهاء ''قبل'' أن تُنجز تلك الكتابة الإضافية إلى مجرى الخرج القياسي <code>stdout</code>.


بدلًا من استدعاء process.exit(‎)‎ مباشرةً، ينبغي ضبط رمز process.exitCode والسماح للعملية بإنهاء طبيعي من خلال تجنب جدولة أي عمل إضافي لحلقة الأحداث.<syntaxhighlight lang="javascript">
بدلًا من استدعاء <code>process.exit(‎)‎</code> مباشرةً، ينبغي ضبط رمز <code>process.exitCode</code> والسماح للعملية بإنهاء طبيعي من خلال تجنب جدولة أي عمل إضافي لحلقة الأحداث.<syntaxhighlight lang="javascript">
// كيف تُجهِّز حالة الخروج/الانتهاء بشكل صحيح بينما تسمح للعملية بالانتهاء بسلام
// كيف تُجهِّز حالة الخروج/الانتهاء بشكل صحيح بينما تسمح للعملية بالانتهاء بسلام
if (someConditionNotMet()) {
if (someConditionNotMet()) {
سطر 621: سطر 623:
}
}


</syntaxhighlight>إذا كان من الضروري إنهاء عملية Node.js بسبب حالة خطأ، فإنّ إلقاء خطأ غير مُلتقط والسماح للعملية بالإنهاء وفق ذلك هو أكثر أمانًا من استدعاء process.exit(‎)‎.
</syntaxhighlight>إذا كان من الضروري إنهاء عملية Node.js بسبب حالة خطأ، فإنّ إلقاء خطأ غير مُلتقط والسماح للعملية بالإنهاء وفق ذلك هو أكثر أمانًا من استدعاء <code>process.exit(‎)‎</code>.


في خيوط Worker، توقف هذه الدالة الخيط الحالي بدلًا من العملية الحالية.
في خيوط [[Node.js/Worker|Worker]]، توقف هذه الدالة الخيط الحالي بدلًا من العملية الحالية.


== process.exitCode ==
== <code>process.exitCode</code> ==
أُضيفت في الإصدار: 0.11.8.
أُضيفت في الإصدار: 0.11.8.
* <integer>
* [[JavaScript/Number|<integer>]]
الرقم الذي سيكون حالة الخروج للعملية، إمّا عندما تنتهي العملية بسلام أو تُنهى بواسطة التابع process.exit(‎)‎ بدون تحديد حالة خروج.
الرقم الذي سيكون حالة الخروج للعملية، إمّا عندما تنتهي العملية بسلام أو تُنهى بواسطة التابع [[Node.js/process#process.exit.28.5Bcode.E2.80.8E.5D.E2.80.8E.29.E2.80.8E|process.exit(‎)]]‎ بدون تحديد حالة خروج.


تعيين حالة خروج للتابع process.exit(‎code‎)‎ سوف يتجاوز أي إعدادٍ سابق للخاصية process.exitCode.
تعيين حالة خروج للتابع [[Node.js/process#process.exit.28.5Bcode.E2.80.8E.5D.E2.80.8E.29.E2.80.8E|process.exit(‎code‎)‎]] سوف يتجاوز أي إعدادٍ سابق للخاصية <code>process.exitCode</code>.


== process.getegid(‎)‎ ==
== <code>process.getegid(‎)‎</code> ==
أُضيف في الإصدار: 2.0.0.
أُضيف في الإصدار: 2.0.0.


يُعيد التابع process.getegid(‎)‎ المُعرِّف الرقمي للمجموعة الفعالة لعمليةNode.js ‎ (انظر ‎getegid(2‎)‎‎)<syntaxhighlight lang="javascript">
يُعيد التابع <code>process.getegid(‎)</code>‎ المُعرِّف الرقمي للمجموعة الفعالة لعمليةNode.js ‎ (انظر [[‎getegid(2‎)‎‎]])<syntaxhighlight lang="javascript">
if (process.getegid) {
if (process.getegid) {
   console.log(`Current gid: ${process.getegid()}`);
   console.log(`Current gid: ${process.getegid()}`);
سطر 641: سطر 643:
</syntaxhighlight>تتوافر هذه الدالة فقط على منصات POSIX ( أي ليست ويندوز أو أندرويد).
</syntaxhighlight>تتوافر هذه الدالة فقط على منصات POSIX ( أي ليست ويندوز أو أندرويد).


== process.geteuid(‎)‎ ==
== <code>process.geteuid(‎)‎</code> ==
أُضيف هذا التابع في الإصدار: 2.0.0.
أُضيف هذا التابع في الإصدار: 2.0.0.
* القيمة المعادة: <Object>
* القيمة المعادة: [[JavaScript/Object|<Object>]]
يعيد التابع process.geteuid(‎)‎ المُعرِّف الرقمي للمستخدم الفعّال للعملية. ‎‎(انظر ‎ (geteuid‎(‎2‎‎‎‎)‎‎<syntaxhighlight lang="javascript">
يعيد التابع <code>process.geteuid(‎)</code>‎ المُعرِّف الرقمي للمستخدم الفعّال للعملية. ‎‎(انظر ‎ ([[geteuid‎(‎2‎‎‎‎)]]‎‎<syntaxhighlight lang="javascript">
if (process.geteuid) {
if (process.geteuid) {
   console.log(`Current uid: ${process.geteuid()}`);
   console.log(`Current uid: ${process.geteuid()}`);
سطر 651: سطر 653:
</syntaxhighlight>تتوافر هذه الدالة فقط على منصات POSIX (أي ليست ويندوز أو أندرويد).
</syntaxhighlight>تتوافر هذه الدالة فقط على منصات POSIX (أي ليست ويندوز أو أندرويد).


== process.getgid(‎)‎ ==
== <code>process.getgid(‎)‎</code> ==
أُضيف في الإصدار: 0.1.31.
أُضيف في الإصدار: 0.1.31.
* القيمة المعادة: <Object>.
* القيمة المعادة: [[JavaScript/Object|<Object>]].
يعيد التابع process.getgid(‎)‎ المُعرِّف الرقمي للمجموعة المالكة لعملية‎ .‎Node.js‎ ‎(انظر ‎(getgid‎(‎‎2‎‎)‎.<syntaxhighlight lang="javascript">
يعيد التابع <code>process.getgid(‎)‎</code> المُعرِّف الرقمي للمجموعة المالكة لعملية‎ .‎Node.js‎ ‎(انظر ‎([[getgid‎(‎‎2‎‎)]]‎.<syntaxhighlight lang="javascript">
if (process.getgid) {
if (process.getgid) {
   console.log(`Current gid: ${process.getgid()}`);
   console.log(`Current gid: ${process.getgid()}`);
سطر 661: سطر 663:
</syntaxhighlight>تتوافر هذه الدالة فقط على منصات POSIX (أي ليست ويندوز أو أندرويد).
</syntaxhighlight>تتوافر هذه الدالة فقط على منصات POSIX (أي ليست ويندوز أو أندرويد).


== process.getgroups(‎)‎ ==
== <code>process.getgroups(‎)‎</code> ==
أُضيف في الإصدار: 0.9.4.
أُضيف في الإصدار: 0.9.4.


القيمة المعادة: <[]integer>.
القيمة المعادة: [[JavaScript/Number|<[]integer>]].


يعيد التابع process.getgroups(‎)‎ مصفوفةً مع المُعرِّف الرقمي للمجموعة المساعدة. تتركها POSIX غير محددة إذا كان معرّف المجموعة الفعّالة مُضمّنًا ولكن Node.js تضمن ذلك دائمًا.
يعيد التابع <code>process.getgroups(‎)</code>‎ مصفوفةً مع المُعرِّف الرقمي للمجموعة المساعدة. تتركها POSIX غير محددة إذا كان معرّف المجموعة الفعّالة مُضمّنًا ولكن Node.js تضمن ذلك دائمًا.


تتوافر هذه الدالة فقط على منصات POSIX ( أي ليست ويندوز أو أندرويد).
تتوافر هذه الدالة فقط على منصات POSIX ( أي ليست ويندوز أو أندرويد).


== process.getuid(‎)‎ ==
== <code>process.getuid(‎)‎</code> ==
أُضيف في الإصدار: 0.1.28.
أُضيف في الإصدار: 0.1.28.


القيمة المعادة: <integer>.
القيمة المعادة: [[JavaScript/Number|<integer>]].


يعيد التابع process.getuid(‎)‎ المعرّف الرقمي لمستخدم العملية. (انظر(getuid(2).<syntaxhighlight lang="javascript">
يعيد التابع <code>process.getuid(‎)‎</code> المعرّف الرقمي لمستخدم العملية. (انظر<nowiki/>[[javascript/integer|(getuid(2]]).<syntaxhighlight lang="javascript">
if (process.getuid) {
if (process.getuid) {
   console.log(`Current uid: ${process.getuid()}`);
   console.log(`Current uid: ${process.getuid()}`);
سطر 681: سطر 683:
</syntaxhighlight>تتوافر هذه الدالة فقط على منصات POSIX ( أي ليست ويندوز أو أندرويد).
</syntaxhighlight>تتوافر هذه الدالة فقط على منصات POSIX ( أي ليست ويندوز أو أندرويد).


== process.hasUncaughtExceptionCaptureCallback‎(‎)‎ ==
== <code>process.hasUncaughtExceptionCaptureCallback‎(‎)‎</code> ==
أُضيف في الإصدار: 9.3.0.
أُضيف في الإصدار: 9.3.0.
* القيمة المعادة: <boolean>.
* القيمة المعادة: [[JavaScript/Boolean|<boolean>]].
يحدد فيما إذا ضُبطت دالة رد النداء باستخدام process.setUncaughtExceptionCaptureCallback(‎)‎.
يحدد فيما إذا ضُبطت دالة رد النداء باستخدام [[Node.js/process#process.setUncaughtExceptionCaptureCallback.28fn.E2.80.8E.29.E2.80.8E|process.setUncaughtExceptionCaptureCallback(‎)‎]].


== process.hrtime([time‎]‎)‎ ==
== <code>process.hrtime([time‎]‎)‎</code> ==
أُضيف في الإصدار: 0.7.6.
أُضيف في الإصدار: 0.7.6.
* ‎‎<‎integer[]‎>‎‎ time: نتيجة الاستدعاء السابق للتابع process.hrtime(‎)‎.
* ‎‎[[JavaScript/Number|<‎integer[]‎>]]‎‎ <code>time</code>: نتيجة الاستدعاء السابق للتابع <code>process.hrtime(‎)</code>‎.
* القيمة المعادة: <integer‎[‎]‎>.
* القيمة المعادة: [[JavaScript/Number|<integer‎[‎]‎>]].
هذا هو الإصدار القديم من ‎process.hrtime.bigint(‎)‎ قبل أن تُدخل bigint في JavaScript.
هذا هو الإصدار القديم من ‎[[Node.js/process#process.hrtime.bigint.28.E2.80.8E.29.E2.80.8E|process.hrtime.bigint(‎)]]‎ قبل أن تُدخل <code>bigint</code> في JavaScript.


يعيد التابع process.hrtime(‎)‎ الزمن الحقيقي الحالي عالي الدقة على شكل مصفوفة بالصيغة [seconds, nanoseconds]، إذ إنَّ nanoseconds هو الجزء المتبقي من الزمن الحقيقي والذي لا يمكن تمثيله بدِقة الثواني.
يعيد التابع <code>process.hrtime(‎)</code>‎ الزمن الحقيقي الحالي عالي الدقة على شكل مصفوفة <code>Array</code> بالصيغة <code>[seconds, nanoseconds]</code>، إذ إنَّ <code>nanoseconds</code> هو الجزء المتبقي من الزمن الحقيقي والذي لا يمكن تمثيله بدِقة الثواني.


time هو معامل اختياري والذي يجب أن يكون نتيجة الاستدعاء السابق للتابع process.hrtime(‎)‎ ليختلف عن الزمن الحالي. إذا لم يكن المعامل المُمرر مصفوفة غير قابلة للتعديل Array، سوف يُلقى خطأ مطبعي (TypeError). التمرير في مصفوفة معرّفة من قبل المستخدم بدلًا من نتيجة الاستدعاء السابق للتابع process.hrtime(‎)‎ سوف يقود إلى سلوك غير معرّف.
<code>time</code> هو معامل اختياري والذي يجب أن يكون نتيجة الاستدعاء السابق للتابع <code>process.hrtime(‎)</code>‎ ليختلف عن الزمن الحالي. إذا لم يكن المعامل المُمرر مصفوفة غير قابلة للتعديل <code>Array</code>، سوف يُلقى خطأ مطبعي (<code>TypeError</code>). التمرير في مصفوفة معرّفة من قبل المستخدم بدلًا من نتيجة الاستدعاء السابق للتابع <code>process.hrtime(‎)</code>‎ سوف يقود إلى سلوك غير معرّف.


هذا الزمن هو نسبي إلى زمن اعتباطي في الماضي، وليس مرتبطًا بزمن اليوم ولذلك لا يخضع لحركة الساعة. الاستخدام الأساسي هو قياس الأداء بين الفترات:<syntaxhighlight lang="javascript">
هذا الزمن هو نسبي إلى زمن اعتباطي في الماضي، وليس مرتبطًا بزمن اليوم ولذلك لا يخضع لحركة الساعة. الاستخدام الأساسي هو قياس الأداء بين الفترات:<syntaxhighlight lang="javascript">
سطر 710: سطر 712:
</syntaxhighlight>
</syntaxhighlight>


== process.hrtime.bigint(‎)‎ ==
== <code>process.hrtime.bigint(‎)‎</code> ==
أُضيف في الإصدار: 10.7.0.
أُضيف في الإصدار: 10.7.0.
* القيمة المعادة: <bigint>
* القيمة المعادة: [https://github.com/tc39/proposal-bigint <bigint>]
إصدار bigint من التابع process.hrtime(‎)‎ يعيد الزمن الحقيقي الحالي عالي الدقة في bigint.
إصدار <code>bigint</code> من التابع [[Node.js/process#process.hrtime.28.5Btime.E2.80.8E.5D.E2.80.8E.29.E2.80.8E|process.hrtime(‎)]]‎ يعيد الزمن الحقيقي الحالي عالي الدقة في <code>bigint</code>.


غير شبيهٍ ب process.hrtime(‎)‎، لايدعم وسيط time إضافي إذ يمُكن أن يُحسب الفرق مباشرةَ بمجرد طرح القيمة المُعادة من التابع bigint المستدعى مرتين.<syntaxhighlight lang="javascript">
غير شبيهٍ ب [[Node.js/process#process.hrtime.28.5Btime.E2.80.8E.5D.E2.80.8E.29.E2.80.8E|process.hrtime(‎)‎]]، لايدعم وسيط <code>time</code> إضافي إذ يمُكن أن يُحسب الفرق مباشرةَ بمجرد طرح القيمة المُعادة من التابع <code>bigint</code> المستدعى مرتين.<syntaxhighlight lang="javascript">
const start = process.hrtime.bigint();
const start = process.hrtime.bigint();
//نانوثانية ‎191051479007711
//نانوثانية ‎191051479007711
سطر 728: سطر 730:
</syntaxhighlight>
</syntaxhighlight>


== process.initgroups(user, extraGroup)‎ ==
== <code>process.initgroups(user, extraGroup)</code>‎ ==
أُضيف في الإصدار: 0.9.4.
أُضيف في الإصدار: 0.9.4.
* ‎‎string‎>‎‎ |‎ ‎<number> user>: اسم المستخدم أو مُعرِّفه الرقمي.
* ‎‎‎[[JavaScript/String|<string‎‎>]]‎‎ |‎ ‎‎[[JavaScript/Number|<number‎>]]‎ <code>user</code>: اسم المستخدم أو مُعرِّفه الرقمي.
* ‎<‎string‎>‎ | <number>‎ extraGroup: اسم المجموعة أو معرّفها الرقمي.
* ‎[[JavaScript/String|<‎string‎>]]| [[JavaScript/Number|<number>]]<code>extraGroup</code>: اسم المجموعة أو معرّفها الرقمي.
يقرأ التابع process.initgroups(‎)‎ الملف ‎/‎etc‎/‎group‎ وينشئ لائحة وصول المجموعات، مستخدمًا كل المجموعات التي يكون فيها المستخدم عضواً. هذه عملية ذات امتيازات وتتطلب أن تملك عملية Node.js وصول الجذر root أو صلاحيات CAP_SETGID.
يقرأ التابع <code>process.initgroups(‎)</code>‎ الملف ‎<code>/‎etc‎/‎group</code>‎ وينشئ لائحة وصول المجموعات، مستخدمًا كل المجموعات التي يكون فيها المستخدم عضواً. هذه عملية ذات امتيازات وتتطلب أن تملك عملية Node.js وصول الجذر <code>root</code> أو صلاحيات <code>CAP_SETGID</code>.


لاحظ أنّه يجب توخي الحذر عند حذف الإمتيازات. مثال:<syntaxhighlight lang="javascript">
لاحظ أنّه يجب توخي الحذر عند حذف الإمتيازات. مثال:<syntaxhighlight lang="javascript">
سطر 741: سطر 743:
console.log(process.getgroups());        // [ 27, 30, 46, 1000 ]
console.log(process.getgroups());        // [ 27, 30, 46, 1000 ]


</syntaxhighlight>تتوافر هذه الدالة فقط على منصات POSIX (أي ليست ويندوز أو أندرويد). هذه الميزة ليست متوافرة في خيوط Worker .
</syntaxhighlight>تتوافر هذه الدالة فقط على منصات POSIX (أي ليست ويندوز أو أندرويد). هذه الميزة ليست متوافرة في خيوط [[node.js/worker|Worker]] .


== process.kill(pid[, signal‎]‎)‎ ==
== <code>process.kill(pid[, signal‎]‎)‎</code> ==
أُضيف في الإصدار: 0.0.6.
أُضيف في الإصدار: 0.0.6.
* ‎<‎number>‎ pid: معرّف العملية
* ‎[[JavaScript/Number|<‎number>]]<code>pid</code>: معرّف العملية
* ‎<‎string>‎ |‎ <number> ‎signal: الإشارة التي ستُرسَل إلى العملية، إمّا أن تكون سلسلة أو رقم. القيمة الإفتراضية: 'SIGTERM'
* ‎[[JavaScript/String|<‎string>]]‎ |‎ [[JavaScript/Number|<number>]] ‎<code>signal</code>: الإشارة التي ستُرسَل إلى العملية، إمّا أن تكون سلسلة أو رقم. '''القيمة الإفتراضية:''' <code>'SIGTERM'</code>
يرسل التابع process.kill(‎)‎ الإشارة signal إلى العملية ذات المُعرِّف pid.
يرسل التابع <code>process.kill(‎)‎</code> الإشارة <code>signal</code> إلى العملية ذات المُعرِّف <code>pid</code>.


أسماء الإشارات هي سلاسل نصية مثل: 'SIGINT' أو 'SIGHUP'. انظر Signal Events و kill(‎2‎‎)‎ للمزيد من المعلومات.
أسماء الإشارات هي سلاسل نصية مثل: <code>'SIGINT'</code> أو <code>'SIGHUP'</code>. انظر [[Node.js/process#.D8.A3.D8.AD.D8.AF.D8.A7.D8.AB .D8.A7.D9.84.D8.A5.D8.B4.D8.A7.D8.B1.D8.A7.D8.AA .28Signal Events.29|أحداث الإشارات (Signal Events)]] و [[kill(‎2‎‎)]]‎ للمزيد من المعلومات.


سيرمي هذا التابع خطأ إذا لم يكن مُعرِّفpid الهدف موجودًا. كحالة خاصة، يمكن أن تُستخدم الإشارة 0 لاختبار وجود عملية. سترمي منصات الويندوز خطأ إذا استُخدِم pid لقتل مجموعة العملية.
سيرمي هذا التابع خطأ إذا لم يكن مُعرِّف<code>pid</code> الهدف موجودًا. كحالة خاصة، يمكن أن تُستخدم الإشارة <code>0</code> لاختبار وجود عملية. سترمي منصات الويندوز خطأ إذا استُخدِم <code>pid</code> لقتل مجموعة العملية.


بالرغم من أن اسم هذه الدالة هو process.kill(‎)‎، هي في الواقع مرسلَة إشارة فقط، مثل نداء النظام kill. قد تفعل الإشارة المرسلة أشياء غير قتل العملية الهدف.<syntaxhighlight lang="javascript">
بالرغم من أن اسم هذه الدالة هو <code>process.kill(‎)‎</code>، هي في الواقع مرسلَة إشارة فقط، مثل نداء النظام <code>kill</code>. قد تفعل الإشارة المرسلة أشياء غير قتل العملية الهدف.<syntaxhighlight lang="javascript">
process.on('SIGHUP', () => {
process.on('SIGHUP', () => {
   console.log('Got SIGHUP signal.');
   console.log('Got SIGHUP signal.');
سطر 764: سطر 766:


process.kill(process.pid, 'SIGHUP');
process.kill(process.pid, 'SIGHUP');
</syntaxhighlight>عندما تُستقبل SIGUSR1 من قبل عملية Node.js، سوف تبدأ Node.js المُنقِحَ (debugger)، انظر أحداث الإشارات.
</syntaxhighlight>عندما تُستقبل <code>SIGUSR1</code> من قبل عملية Node.js، سوف تبدأ Node.js المُنقِحَ (debugger)، انظر [[Node.js/process#.D8.A3.D8.AD.D8.AF.D8.A7.D8.AB .D8.A7.D9.84.D8.A5.D8.B4.D8.A7.D8.B1.D8.A7.D8.AA .28Signal Events.29|أحداث الإشارات]].


== process.mainModule ==
== <code>process.mainModule</code> ==
أُضيفت في الإصدار: 0.1.17.
أُضيفت في الإصدار: 0.1.17.
* <Object>.
* [[JavaScript/Object|<Object>]].
تقدم الخاصية process.mainModule طريقةً بديلةً لاستعادة require.main. الاختلاف هو إذا كانت الوحدة الرئيسة تتغير في وقت التنفيذ، قد تبقى require.main مشيرةً إلى الوحدة الأساسية الأصلية في وحدات طُلبت قبل حدوث التغييرات. عمومًا. من الآمن افتراض أن الاثنتين تشيران إلى الوحدة ذاتها.
تقدم الخاصية <code>process.mainModule</code> طريقةً بديلةً لاستعادة [[Node.js/modules#.D8.A7.D9.84.D9.88.D8.B5.D9.88.D9.84 .D8.A5.D9.84.D9.89 .D8.A7.D9.84.D9.88.D8.AD.D8.AF.D8.A9 .D8.A7.D9.84.D8.B1.D8.A6.D9.8A.D8.B3.D9.8A.D8.A9|require.main]]. الاختلاف هو إذا كانت الوحدة الرئيسة تتغير في وقت التنفيذ، قد تبقى [[Node.js/modules#.D8.A7.D9.84.D9.88.D8.B5.D9.88.D9.84 .D8.A5.D9.84.D9.89 .D8.A7.D9.84.D9.88.D8.AD.D8.AF.D8.A9 .D8.A7.D9.84.D8.B1.D8.A6.D9.8A.D8.B3.D9.8A.D8.A9|require.main]] مشيرةً إلى الوحدة الأساسية الأصلية في وحدات طُلبت قبل حدوث التغييرات. عمومًا. من الآمن افتراض أن الاثنتين تشيران إلى الوحدة ذاتها.


مع require.main، ستكون process.mainModule غير معرّفة undefined إذا لم يكن هناك سكربت مَدخِل (entry script).
مع [[Node.js/modules#.D8.A7.D9.84.D9.88.D8.B5.D9.88.D9.84 .D8.A5.D9.84.D9.89 .D8.A7.D9.84.D9.88.D8.AD.D8.AF.D8.A9 .D8.A7.D9.84.D8.B1.D8.A6.D9.8A.D8.B3.D9.8A.D8.A9|require.main]]، ستكون <code>process.mainModule</code> غير معرّفة <code>undefined</code> إذا لم يكن هناك سكربت مَدخِل (entry script).


== process.memoryUsage(‎)‎ ==
== <code>process.memoryUsage(‎)</code>‎ ==
سجل التغييرات
سجل التغييرات


سطر 781: سطر 783:
|-
|-
|7.2.0.
|7.2.0.
|أُضيفت الخاصية external إلى لكائن المُعاد.
|أُضيفت الخاصية <code>external</code> إلى لكائن المُعاد.
|-
|-
|0.1.16.
|0.1.16.
|أُضيفت في الإصدار 0.1.16.
|أُضيفت في الإصدار 0.1.16.
|}
|}
* القيمة المعادة: <Object>
* القيمة المعادة: [[JavaScript/Object|<Object>]]
** ‎<‎integer>‎ rss
** ‎[[JavaScript/Number|<‎integer>]]<code>rss</code>
** ‎<integer>‎ heapTotal
** [[JavaScript/Number|‎<integer>]]<code>heapTotal</code>
** ‎integer>‎ heapUsed‎>
** ‎[[JavaScript/Number|<integer>]]<code>heapUsed‎</code>
** ‎integer>‎ external>
** [[JavaScript/Number|‎<integer>]]<code>external</code>
يعيد التابع process.memoryUsage(‎)‎ كائن يوصّف استخدام الذاكرة في عملية Node.js مقاسًا بالبايتات.
يعيد التابع <code>process.memoryUsage(‎)</code>‎ كائن يوصّف استخدام الذاكرة في عملية Node.js مقاسًا بالبايتات.


على سبيل المثال، الشيفرة التالية:<syntaxhighlight lang="javascript">
على سبيل المثال، الشيفرة التالية:<syntaxhighlight lang="javascript">
سطر 804: سطر 806:




</syntaxhighlight>تشير heapTotal و heapUsed إلى استخدام ذاكرة V8. تشير external إلى استخدام الذاكرة لكائنات C+‎+‎ المرتبطة بكائنات JavaScript المُدارة من قبل V8.
</syntaxhighlight>تشير <code>heapTotal</code> و <code>heapUsed</code> إلى استخدام ذاكرة V8. تشير <code>external</code> إلى استخدام الذاكرة لكائنات C+‎+‎ المرتبطة بكائنات JavaScript المُدارة من قبل V8.


Rss، أي Resident Set Size (حجم المجموعة المشغولة)، هو كمية الفراغ المشغول في جهاز الذاكرة الرئيسي (والذي هو مجموعة جزئية من الذاكرة المخصصة الكلية) للعملية، والذي يتضمن الكومة heap، ومقطع الشيفرة code segment، والمكدّس stack.
<code>Rss</code>، أي Resident Set Size (حجم المجموعة المشغولة)، هو كمية الفراغ المشغول في جهاز الذاكرة الرئيسي (والذي هو مجموعة جزئية من الذاكرة المخصصة الكلية) للعملية، والذي يتضمن الكومة heap، ومقطع الشيفرة code segment، والمكدّس stack.


الكومة heap هي حيث تُخزّن الكائنات والسلاسل النصية و التعابير المغلقة (closures). تخزّن المتحولات في المكدّس stack وتبقى شيفرة JavaScript الفعلية في مقطع الشيفرة (code segment).
الكومة heap هي حيث تُخزّن الكائنات والسلاسل النصية و التعابير المغلقة (closures). تخزّن المتحولات في المكدّس stack وتبقى شيفرة JavaScript الفعلية في مقطع الشيفرة (code segment).


عند استخدام خيوط Worker، ستكون rss قيمة متاحة لكامل العملية، بينما ستشير الحقول الأخرى للخيط الحالي فقط.
عند استخدام خيوط Worker، ستكون <code>rss</code> قيمة متاحة لكامل العملية، بينما ستشير الحقول الأخرى للخيط الحالي فقط.


== process.nextTick(callback[, ...args]‎)‎ ==
== process.nextTick(callback[, ...args]‎)‎ ==
سطر 820: سطر 822:
|-
|-
|1.8.1.
|1.8.1.
|دُعِمت الآن وسائط إضافية بعد callback.
|دُعِمت الآن وسائط إضافية بعد <code>callback</code>.
|-
|-
|0.1.26.
|0.1.26.
|أُضيفت في 0.1.26.
|أُضيفت في 0.1.26.
|}
|}
* ‎Function‎>‎‎ callback>.
* ‎[[JavaScript/Function|<Function‎>]]‎‎ <code>callback</code>.
* ‎<‎any>‎‎ args: وسائط إضافية لتُمرر عند استدعاء callback.
* ‎[[javascript/any|<‎any>]]‎‎ <code>args</code>: وسائط إضافية لتُمرر عند استدعاء callback.
يضيف التابع process.nextTick(‎)‎ دالة رد النداء (callback) إلى "رتل النبضة التالية" "next tick queue". حالما يكتمل الدور الحالي من أدوار حلقة الأحداث، سوف تُستدعى كل دوال رد النداء الحالية (callbacks) في رتل النبضة التالية.
يضيف التابع <code>process.nextTick(‎)</code>‎ دالة رد النداء (callback) إلى "رتل النبضة التالية" "next tick queue". حالما يكتمل الدور الحالي من أدوار حلقة الأحداث، سوف تُستدعى كل دوال رد النداء الحالية (callbacks) في رتل النبضة التالية.


هذا ليس بديلاً بسيطًا للتابع setTimeout(fn, 0‎)‎. إنّه أكثر فاعلية بكثير. فهو يعمل قبل أن تنطلق أي أحداث دخل وخرج إضافية (متضمنة المؤقتات) في النبضات اللاحقة لحلقة الأحداث.<syntaxhighlight lang="javascript">
هذا ليس بديلاً بسيطًا للتابع [[Node.js/timers#setTimeout.28callback.2C delay.5B.2C ...args.5D.29.E2.80.8E|setTimeout(fn, 0‎)]]‎. إنّه أكثر فاعلية بكثير. فهو يعمل قبل أن تنطلق أي أحداث دخل وخرج إضافية (متضمنة المؤقتات) في النبضات اللاحقة لحلقة الأحداث.<syntaxhighlight lang="javascript">
console.log('start');
console.log('start');
process.nextTick(() => {
process.nextTick(() => {
سطر 873: سطر 875:


bar();
bar();
</syntaxhighlight>ليس واضحًا أي من foo(‎)‎ أو bar(‎)‎ سوف يُستدعى أولًا.
</syntaxhighlight>ليس واضحًا أي من <code>foo(‎)</code>‎ أو <code>bar(‎)</code>‎ سوف يُستدعى أولًا.


النهج التالي أفضل بكثير:<syntaxhighlight lang="javascript">
النهج التالي أفضل بكثير:<syntaxhighlight lang="javascript">
سطر 884: سطر 886:
   fs.stat('file', cb);
   fs.stat('file', cb);
}
}
</syntaxhighlight>يكون رتل النبضة التالية مُستنزَفًا كليًا كل عبور لحلقة الأحداث قبل أن تُعالج عمليات دخل وخرج إضافية. بالنتيجة، سوف يَحظُرُ الضبط التكراري لتابع رد النداء nextTick(‎)‎ أي عمليات دخل وخرج من الحدوث، تمامًا مثل حلقة while(true‎)‎;‎.
</syntaxhighlight>يكون رتل النبضة التالية مُستنزَفًا كليًا كل عبور لحلقة الأحداث قبل أن تُعالج عمليات دخل وخرج إضافية. بالنتيجة، سوف يَحظُرُ الضبط التكراري لتابع رد النداء <code>nextTick(‎)</code>‎ أي عمليات دخل وخرج من الحدوث، تمامًا مثل حلقة <code>while(true‎)‎;</code>‎.


== process.noDeprecation ==
== <code>process.noDeprecation</code> ==
أُضيفت في الإصدار: 0.8.0.
أُضيفت في الإصدار: 0.8.0.
* <boolean>
* [[JavaScript/Boolean|<boolean>]]
تحدد الخاصية process.noDeprecation فيما إذا كانت راية ‎-‎-‎no‎-‎deprecation‎ مضبوطة في عملية Node.js الحالية. انظر توثيق 'warning' event و emitWarning() method للمزيد من المعلومات حول سلوك هذه الراية.
تحدد الخاصية <code>process.noDeprecation</code> فيما إذا كانت راية ‎<code>-‎-‎no‎-‎deprecation‎</code> مضبوطة في عملية Node.js الحالية. انظر توثيق [[Node.js/process#.D8.A7.D9.84.D8.AD.D8.AF.D8.AB .27warning.27|'warning' event]] و [[Node.js/process#process.emitWarning.28warning.5B.2C type.5B.2C code.5D.5D.5B.2C ctor.E2.80.8E.5D.E2.80.8E.29.E2.80.8E|emitWarning()method]] للمزيد من المعلومات حول سلوك هذه الراية.


== process.pid ==
== <code>process.pid</code> ==
أُضيفت في الإصدار: 0.1.15.
أُضيفت في الإصدار: 0.1.15.
* <integer>
* [[JavaScript/Number|<integer>]]
تعيد الخاصية process.pid معرّف العملية (PID) للعملية الحالية.<syntaxhighlight lang="javascript">
تعيد الخاصية <code>process.pid</code> معرّف العملية (PID) للعملية الحالية.<syntaxhighlight lang="javascript">
console.log(`This process is pid ${process.pid}`);
console.log(`This process is pid ${process.pid}`);
</syntaxhighlight>
</syntaxhighlight>


== process.platform ==
== <code>process.platform</code> ==
أُضيفت في الإصدار: 0.1.16.
أُضيفت في الإصدار: 0.1.16.
* <string>
* [[JavaScript/String|<string>]]
تعيد الخاصية process.platform سلسلة نصية مُعرِّفةً منصة نظام التشغيل التي تُشغّل عليها عملية Node.js.
تعيد الخاصية process.platform سلسلة نصية مُعرِّفةً منصة نظام التشغيل التي تُشغّل عليها عملية Node.js.


القيم الحالية الممكنة هي:
القيم الحالية الممكنة هي:
* 'aix'
* <code>'aix'</code>
* 'darwin'
* <code>'darwin'</code>
* 'freebsd'
* <code>'freebsd'</code>
* 'linux'
* <code>'linux'</code>
* 'openbsd'
* <code>'openbsd'</code>
* 'sunos'
* <code>'sunos'</code>
* 'win32'
* <code>'win32'</code>
<syntaxhighlight lang="javascript">
<syntaxhighlight lang="javascript">
console.log(`This platform is ${process.platform}`);
console.log(`This platform is ${process.platform}`);


</syntaxhighlight>قد تُعاد أيضًا القيمة 'android' إذا بُنيت Node.js على نظام تشغيل أندرويد. لكن، دعم الأندرويد في Node.js هو تجريبي is experimental.
</syntaxhighlight>قد تُعاد أيضًا القيمة <code>'android'</code> إذا بُنيت Node.js على نظام تشغيل أندرويد. لكن، دعم الأندرويد في Node.js هو تجريبي [https://github.com/nodejs/node/blob/master/BUILDING.md#androidandroid-based-devices-eg-firefox-os is experimental].


== process.ppid ==
== <code>process.ppid</code> ==
أُضيفت في الإصدار: 9.2.0.
أُضيفت في الإصدار: 9.2.0.
* <integer>
* [[JavaScript/Number|<integer>]]
تعيد الخاصية process.ppid معرّف العملية PID لعملية الأب الحالية.<syntaxhighlight lang="javascript">
تعيد الخاصية <code>process.ppid</code> معرّف العملية PID لعملية الأب الحالية.<syntaxhighlight lang="javascript">
console.log(`The parent process is pid ${process.ppid}`);
console.log(`The parent process is pid ${process.ppid}`);


</syntaxhighlight>
</syntaxhighlight>


== process.release ==
== <code>process.release</code> ==
سجل التغييرات
سجل التغييرات


سطر 932: سطر 934:
|-
|-
|4.2.0.
|4.2.0.
|دُعمت الخاصية lts الآن.
|دُعمت الخاصية <code>lts</code> الآن.
|-
|-
|3.0.0.
|3.0.0.
|أُضيفت في 3.0.0.
|أُضيفت في 3.0.0.
|}
|}
* <Object>
* [[JavaScript/Object|<Object>]]
تعيد الخاصية process.release كائنًا (Object) حاويًا على البيانات الوصفية المتعلقة بالإصدار الحالي، متضمنةً عناوين URL لأرشيفات tar المصدرية وأرشيفات الترويسات البرمجية فقط.
تعيد الخاصية <code>process.release</code> كائنًا (<code>Object</code>) حاويًا على البيانات الوصفية المتعلقة بالإصدار الحالي، متضمنةً عناوين URL لأرشيفات tar المصدرية وأرشيفات الترويسات البرمجية فقط.


تضم process.release الخاصيات التالية:
تضم <code>process.release</code> الخاصيات التالية:
* ‎<‎string‎>‎‎ ‎name ‎: ستكون القيمة دائمًا عقدة 'node' من أجل Node.js. من أجل الإصدارات القديمة من io.js، ستكون 'io.js'.
* ‎[[JavaScript/String|<‎string‎>]]‎‎ <code>‎name</code> ‎: ستكون القيمة دائمًا عقدة <code>'node'</code> من أجل Node.js. من أجل الإصدارات القديمة من io.js، ستكون <code>'io.js'</code>.
* ‎<‎string‎>‎‎ sourceUrl: عنوان URL مطلق مشير إلى ملف ‎.‎tar.gz الحاوي على الشيفرة المصدرية للإصدار الحالي.
* ‎[[JavaScript/String|<‎string‎>]]‎‎ <code>sourceUrl</code>: عنوان URL مطلق مشير إلى ملف <code>‎.‎tar.gz</code> الحاوي على الشيفرة المصدرية للإصدار الحالي.
* ‎<‎string‎>‎ headersUrl‎: عنوان مطلق مُشير إلى ملف ‎.‎tar.gz الحاوي فقط على ملفات الترويسات البرمجية المصدرية للإصدار الحالي. هذه الملفات أصغر بشكل ملحوظ من الملفات المصدرية الكاملة ويمكن أن تُستخدم  لتصريف (compile) الإضافات الأصلية لبيئة Node.js.
* ‎[[JavaScript/String|<‎string‎>]]<code>headersUrl‎</code>: عنوان مطلق مُشير إلى ملف <code>‎.‎tar.gz</code> الحاوي فقط على ملفات الترويسات البرمجية المصدرية للإصدار الحالي. هذه الملفات أصغر بشكل ملحوظ من الملفات المصدرية الكاملة ويمكن أن تُستخدم  لتصريف (compile) الإضافات الأصلية لبيئة Node.js.
* ‎<‎string‎>‎‎‎libUrl: عنوان مطلق يشير إلى ملف node.lib المطابق للبنية المعمارية والإصدار الحالي. يُستخدم هذا الملف لتصريف (compile) إضافات Node.js أصلية. هذه الخاصية حاضرة فقط لبيئة Node.js المبنية على ويندوز وسوف تكون مفقودة على جميع المنصات الأخرى.
* ‎[[JavaScript/String|<‎string‎>]]<code>‎‎‎libUrl</code>: عنوان مطلق يشير إلى ملف <code>node.lib</code> المطابق للبنية المعمارية والإصدار الحالي. يُستخدم هذا الملف لتصريف (compile) إضافات Node.js أصلية. ه''ذه الخاصية حاضرة فقط لبيئة Node.js المبنية على ويندوز وسوف تكون مفقودة على جميع المنصات الأخرى.''
* ‎‎<‎‎string‎‎>‎‎‎‎ lts: لافتة نصية معرِّفة للافتة LTS (أي Long Term Support، وهي الإصدارات طويلة الدعم) لهذا الإصدار. هذه الخاصية موجودة فقط من أجل إصدارات LTS وهي غير معرّفة من أجل كل أنواع الإصدارات الأخرى متضمنةً الإصدارات الحالية (Current releases). القيم المتوافرة حاليًا تكون:
* ‎‎[[JavaScript/String|<‎‎string‎‎>]]‎‎‎‎ <code>lts</code>: لافتة نصية معرِّفة للافتة [https://github.com/nodejs/Release LTS] (أي Long Term Support، وهي الإصدارات طويلة الدعم) لهذا الإصدار. هذه الخاصية موجودة فقط من أجل إصدارات LTS وهي غير معرّفة <code>undefined</code> من أجل كل أنواع الإصدارات الأخرى متضمنةً الإصدارات الحالية (Current releases). القيم المتوافرة حاليًا تكون:


* 'Argon'  من أجل خط الدعم طويل الأمد 4‎.‎x‎ LTS‎ البادئ مع 4.2.0.
* <code>'Argon'</code>  من أجل خط الدعم طويل الأمد 4‎.‎x‎ LTS‎ البادئ مع 4.2.0.
* 'Boron' من أجل خط الدعم طويل الأمد ‎6‎.x‎ LTS‎  البادئ مع 6.9.0.
* <code>'Boron'</code> من أجل خط الدعم طويل الأمد ‎6‎.x‎ LTS‎  البادئ مع 6.9.0.
* 'Boron'  من أجل خط الدعم طويل الأمد ‎8‎‎.‎x‎ LTS‎ البادئ مع 8.9.1.
* <code>'Boron'</code>  من أجل خط الدعم طويل الأمد ‎8‎‎.‎x‎ LTS‎ البادئ مع 8.9.1.
<syntaxhighlight lang="javascript">
<syntaxhighlight lang="javascript">
{
{
سطر 959: سطر 961:
}
}


</syntaxhighlight>في بُنى مخصصة من الإصدارات التي ليست ضمن قائمة الإصدارات لشجرة المصدر، قد تكون الخاصية name حاضرةً فقط، لا ينبغي الاعتماد على وجود بقية الخاصيات.
</syntaxhighlight>في بُنى مخصصة من الإصدارات التي ليست ضمن قائمة الإصدارات لشجرة المصدر، قد تكون الخاصية <code>name</code> حاضرةً فقط، لا ينبغي الاعتماد على وجود بقية الخاصيات.


== process.send(message[, sendHandle[, options]][, callback‎]‎)‎ ==
== <code>process.send(message[, sendHandle[, options]][, callback‎]‎)‎</code> ==
أُضيف في الإصدار: 0.5.9.
أُضيف في الإصدار: 0.5.9.
* ‎‎Object‎‎‎>‎‎‎ message>
* ‎‎[[JavaScript/Object|<Object‎‎‎>]]‎‎‎ <code>message</code>
* ‎net.Server>‎ | ‎<‎net.Socket‎>‎‎ sendHandle>
* [[Node.js/net#.D8.A7.D9.84.D8.B5.D9.86.D9.81 net.Server|‎‎<net.Server>]]| [[Node.js/net#.D8.A7.D9.84.D8.B5.D9.86.D9.81 net.Socket|‎<‎net.Socket‎>]]‎‎ <code>sendHandle</code>
* ‎<‎Object‎‎>‎‎ options‎   
* [[JavaScript/Object|‎<‎Object‎‎>]]‎‎ <code>options‎</code>   
* ‎Function‎>‎‎ callback>
* ‎[[JavaScript/Function|<‎Function‎‎>]]‎‎ <code>callback</code>
* ‎ القيمة المُعادة: <boolean>
* ‎ القيمة المُعادة: [[JavaScript/Boolean|<boolean>]]
إذا وُلِّدت عملية Node.js عبر قناة الاتصالات ما بين العمليات IPC ، يمكن أن يُستخدم التابع process.send(‎)‎ لإرسال رسائل للعملية الأب. ستُستقبل الرسائل كحدث 'message' في كائن ChildProcess الخاص بالأب.
إذا وُلِّدت عملية Node.js عبر قناة الاتصالات ما بين العمليات IPC ، يمكن أن يُستخدم التابع <code>process.send(‎)‎</code> لإرسال رسائل للعملية الأب. ستُستقبل الرسائل كحدث [[Node.js/child process#.D8.A7.D9.84.D8.AD.D8.AF.D8.AB .27message.27|'message']] في كائن [[Node.js/child process#.D8.A7.D9.84.D8.B5.D9.86.D9.81 ChildProcess|ChildProcess]] الخاص بالأب.


إذا لم تكن Node.js مُولَّدة بقناة الاتصال ما بين العمليات IPC، سوف تكون process.send(‎)‎ غير معرّفة undefined.
إذا لم تكن Node.js مُولَّدة بقناة الاتصال ما بين العمليات IPC، سوف تكون <code>process.send(‎)</code>‎ غير معرّفة <code>undefined</code>.


ستمر الرسالة عبر التسلسل والتحليل النحوي، قد لا تكون الرسالة الناتجة تمامًا كالأصلية المرسلة.
ستمر الرسالة عبر التسلسل والتحليل النحوي، قد لا تكون الرسالة الناتجة تمامًا كالأصلية المرسلة.


== process.setegid(id‎)‎ ==
== <code>process.setegid(id‎)‎</code> ==
أُضيف في الإصدار: 2.0.0.
أُضيف في الإصدار: 2.0.0.
* ‎<‎string‎>‎ | ‎‎<number‎>‎‎ id ‎: اسم المجموعة أو معرّفها.
* ‎[[JavaScript/String|<‎string‎>]]‎ | ‎‎[[JavaScript/Number|<number‎>]]‎‎ <code>id</code> ‎: اسم المجموعة أو معرّفها.
يضبط التابع process.setegid(‎)‎ هوية المجموعة الفعّالة للعملية. (انظر setegid‎(‎2‎)‎). يمكن أن يُمرر id إمّا كمعرّف رقمي أو سلسلة اسم المجموعة. إذا كان اسم المجموعة مُحددًا، ينحظر هذا التابع أثناء استبيان (resolving) المعرّف الرقمي المزوّد (the associated a numeric ID).<syntaxhighlight lang="javascript">
يضبط التابع <code>process.setegid(‎)</code>‎ هوية المجموعة الفعّالة للعملية. (انظر [[setegid‎(‎2‎)]]‎). يمكن أن يُمرر <code>id</code> إمّا كمعرّف رقمي أو سلسلة اسم المجموعة. إذا كان اسم المجموعة مُحددًا، ينحظر هذا التابع أثناء استبيان (resolving) المعرّف الرقمي المزوّد (the associated a numeric ID).<syntaxhighlight lang="javascript">
if (process.getegid && process.setegid) {
if (process.getegid && process.setegid) {
   console.log(`Current gid: ${process.getegid()}`);
   console.log(`Current gid: ${process.getegid()}`);
سطر 987: سطر 989:
   }
   }
}
}
</syntaxhighlight>هذه الدالة متوافرة فقط على منصات POSIX ( أي ليست ويندوز أو أندرويد). هذه الميزة ليست متوافرة في خيوط Worker.
</syntaxhighlight>هذه الدالة متوافرة فقط على منصات POSIX ( أي ليست ويندوز أو أندرويد). هذه الميزة ليست متوافرة في خيوط [[Node.js/worker|Worker]].


== process.seteuid(id‎)‎ ==
== <code>process.seteuid(id‎)‎</code> ==
أُضيف في الإصدار: 2.0.0.
أُضيف في الإصدار: 2.0.0.
* ‎<string> | <number> id:  اسم المستخدم أو معرّفه.
* ‎[[JavaScript/String|<string>]] | [[JavaScript/Number|<number>]] <code>id</code>:  اسم المستخدم أو معرّفه.
يهيئ التابع process.seteuid(‎)‎ معرّف المستخدم الفعّال للعملية .(انظر seteuid(2‎‎)‎) يمكن أن يُمرر id إمّا كمعرّف رقمي أو سلسلة نصية لاسم المجموعة. إذا كان اسم المستخدم محددًا، ينحظر هذا التابع أثناء استبيان (resolving) المعرّف الرقمي المزوّد (the associated a numeric ID).<syntaxhighlight lang="javascript">
يهيئ التابع <code>process.seteuid(‎)</code>‎ معرّف المستخدم الفعّال للعملية .(انظر [[seteuid(2‎‎)]]‎) يمكن أن يُمرر <code>id</code> إمّا كمعرّف رقمي أو سلسلة نصية لاسم المجموعة. إذا كان اسم المستخدم محددًا، ينحظر هذا التابع أثناء استبيان (resolving) المعرّف الرقمي المزوّد (the associated a numeric ID).<syntaxhighlight lang="javascript">
if (process.geteuid && process.seteuid) {
if (process.geteuid && process.seteuid) {
   console.log(`Current uid: ${process.geteuid()}`);
   console.log(`Current uid: ${process.geteuid()}`);
سطر 1٬003: سطر 1٬005:
}
}


</syntaxhighlight>هذه الدالة متوافرة فقط على منصات POSIX (أي ليست ويندوز أو أندرويد). هذه الميزة ليست متوافرة في خيوط Worker.
</syntaxhighlight>هذه الدالة متوافرة فقط على منصات POSIX (أي ليست ويندوز أو أندرويد). هذه الميزة ليست متوافرة في خيوط [[Node.js/worker|Worker]].


== process.setgid‎(‎id‎)‎ ==
== <code>process.setgid‎(‎id‎)‎</code> ==
أُضيف في الإصدار: 0.1.31.
أُضيف في الإصدار: 0.1.31.
* ‎<string> | <number> id: اسم المجموعة أو معرّفها.
* ‎[[JavaScript/String|<string>]] | [[JavaScript/Number|<number>]] <code>id</code>: اسم المجموعة أو معرّفها.
يهيئ التابع process.setgid‎()‎ معرّف المجموعة للعملية. (انظر setgid(2‎‎)‎) يمكن أن يُمرر id إمّا كمعرّف رقمي أو سلسلة نصية لاسم المجموعة. إذا كان اسم المجموعة محددًا، ينحظر هذا التابع أثناء استبيان (resolving) المعرّف الرقمي المزوّد (the associated a numeric ID).<syntaxhighlight lang="javascript">
يهيئ التابع <code>process.setgid‎()‎</code> معرّف المجموعة للعملية. (انظر [[setgid(2‎‎)]]‎) يمكن أن يُمرر <code>id</code> إمّا كمعرّف رقمي أو سلسلة نصية لاسم المجموعة. إذا كان اسم المجموعة محددًا، ينحظر هذا التابع أثناء استبيان (resolving) المعرّف الرقمي المزوّد (the associated a numeric ID).<syntaxhighlight lang="javascript">
if (process.getgid && process.setgid) {
if (process.getgid && process.setgid) {
   console.log(`Current gid: ${process.getgid()}`);
   console.log(`Current gid: ${process.getgid()}`);
سطر 1٬018: سطر 1٬020:
   }
   }
}
}
</syntaxhighlight>هذه الدالة متوافرة فقط على منصات POSIX (أي ليست ويندوز أو أندرويد). هذه الميزة ليست متوافرة في خيوط Worker.
</syntaxhighlight>هذه الدالة متوافرة فقط على منصات POSIX (أي ليست ويندوز أو أندرويد). هذه الميزة ليست متوافرة في خيوط [[Node.js/worker|Worker]].


== process.setgroups(groups)‎ ==
== <code>process.setgroups(groups)‎</code> ==
أُضيف في الإصدار: 0.9.4.
أُضيف في الإصدار: 0.9.4.
* ‎integer‎[]>‎‎ groups>.
* ‎.‎[[JavaScript/Number|<‎integer‎‎[‎]‎‎>]]‎‎ groups
يهيء التابع process.setgroups(‎)‎ معرّفات المجموعات المساعدة لعملية Node.js. هذه عملية ذات امتياز والتي تتطلب أن تمتلك عملية Node.js امتيازات الجذر (root) أو الصلاحية CAP_SETGID.
يهيء التابع <code>process.setgroups(‎)</code>‎ معرّفات المجموعات المساعدة لعملية Node.js. هذه عملية ذات امتياز والتي تتطلب أن تمتلك عملية Node.js امتيازات الجذر (<code>root</code>) أو الصلاحية <code>CAP_SETGID</code>.


يمكن أن تحتوي المصفوفة groups المعرّفات الرقمية للمجموعات أو أسماء المجموعات أو الاثنتين.
يمكن أن تحتوي المصفوفة <code>groups</code> المعرّفات الرقمية للمجموعات أو أسماء المجموعات أو الاثنتين.


هذه الدالة متوافرة فقط على منصات POSIX (أي ليست ويندوز أو أندرويد). هذه الميزة ليست متوافرة في خيوط Worker.
هذه الدالة متوافرة فقط على منصات POSIX (أي ليست ويندوز أو أندرويد). هذه الميزة ليست متوافرة في خيوط [[Node.js/worker|Worker]].


== process.setuid(id)‎ ==
== <code>process.setuid(id)‎</code> ==
أُضيف في الإصدار: 0.1.28.
أُضيف في الإصدار: 0.1.28.


يضبط التابع process.setuid()‎ معرّف المستخدم للعملية. (انظر setuid(2‎‎)‎). يمكن أن يُمرر id إمّا كمعرِّف رقمي أو سلسلة اسم مستخدم. إذا كان اسم المستخدم مُحددًا، ينحظر هذا التابع أثناء استبيان (resolving) المعرّف الرقمي المزوّد (the associated a numeric ID).<syntaxhighlight lang="javascript">
يضبط التابع <code>process.setuid()</code>‎ معرّف المستخدم للعملية. (انظر [[setuid(2‎‎)‎]]). يمكن أن يُمرر <code>id</code> إمّا كمعرِّف رقمي أو سلسلة اسم مستخدم. إذا كان اسم المستخدم مُحددًا، ينحظر هذا التابع أثناء استبيان (resolving) المعرّف الرقمي المزوّد (the associated a numeric ID).<syntaxhighlight lang="javascript">
if (process.getuid && process.setuid) {
if (process.getuid && process.setuid) {
   console.log(`Current uid: ${process.getuid()}`);
   console.log(`Current uid: ${process.getuid()}`);
سطر 1٬043: سطر 1٬045:
}
}


</syntaxhighlight>هذه الدالة متوافرة فقط على منصات POSIX (أي ليست ويندوز أو أندرويد). هذه الميزة ليست متوافرة في خيوط Worker.
</syntaxhighlight>هذه الدالة متوافرة فقط على منصات POSIX (أي ليست ويندوز أو أندرويد). هذه الميزة ليست متوافرة في خيوط [[Node.js/worker|Worker]].


== process.setUncaughtExceptionCaptureCallback(fn‎)‎ ==
== <code>process.setUncaughtExceptionCaptureCallback(fn‎)‎</code> ==
أُضيف في الإصدار: 9.3.0.
أُضيف في الإصدار: 9.3.0.
* ‎<Function‎> | ‎<null‎> ‎‎fn
* ‎[[JavaScript/Function|<Function‎>]] | ‎[[JavaScript/null|<null‎>]] ‎‎<code>fn</code>
يهيء التابعُ process.setUncaughtExceptionCaptureCallback(‎)‎ التابعَ الذي سيُستدعى عندما يحصل استثناء غير مُلتقط، والذي سيستقبل قيمة الاستثناء نفسها كوسيطه الأول.
يهيء التابعُ <code>process.setUncaughtExceptionCaptureCallback(‎)</code>‎ التابعَ الذي سيُستدعى عندما يحصل استثناء غير مُلتقط، والذي سيستقبل قيمة الاستثناء نفسها كوسيطه الأول.


إذا هُيئ مثل هذا التابع، لن يُطلق الحدث 'uncaughtException'. ولن تتوقف العملية إذا مُرر ‎-‎-‎abort-‎on-‎uncaught-‎exception‎ من سطر الأوامر أو هُيء من خلال v8.setFlagsFromString(‎)‎.
إذا هُيئ مثل هذا التابع، لن يُطلق الحدث [[Node.js/process#.D8.A7.D9.84.D8.AD.D8.AF.D8.AB .27uncaughtException.27|'uncaughtException']]. ولن تتوقف العملية إذا مُرر ‎<code>-‎-‎abort-‎on-‎uncaught-‎exception</code>‎ من سطر الأوامر أو هُيء من خلال [[v8.setFlagsFromString(‎)‎]].


لإزالة تهيئة تابع الالتقاط، يمكن أن يُستخدم process.setUncaughtExceptionCaptureCallback(null)‎. إنّ استدعاء هذا التابع مع وسائط غير معدومة بينما يُهيأ تابع التقاط آخر قد يرمي خطأً.
لإزالة تهيئة تابع الالتقاط، يمكن أن يُستخدم <code>process.setUncaughtExceptionCaptureCallback(null)</code>‎. إنّ استدعاء هذا التابع مع وسائط غير معدومة non-<code>null</code> بينما يُهيأ تابع التقاط آخر قد يرمي خطأً.


استخدام هذا التابع لا يعتمد على استخدام الوحدة المدمجة المُهملة domain.
استخدام هذا التابع لا يعتمد على استخدام الوحدة المدمجة المُهملة [[domain]].


== process.stderr ==
== <code>process.stderr</code> ==
* <Stream>
* [[node.js/stream|<Stream>]]
تعيد الخاصية process.stderr مجرى متصل إلى ‎stderr‎ [واصف الملفات ‎(‎fd 2‎)‎]. إنّها net.Socket (والتي هي مجرى مزدوج‎‎(‎‎Duplex)‎‎  ‎) إلّا إذا أشار ‎[واصف الملفات (fd 2)] إلى ملف، في تلك الحالة تكون مجرى Writable.
تعيد الخاصية <code>process.stderr</code> مجرى متصل إلى ‎<code>stderr‎</code> [واصف الملفات ‎(‎fd <code>2</code>‎)‎]. إنّها [[Node.js/net#.D8.A7.D9.84.D8.B5.D9.86.D9.81 net.Socket|net.Socket]] (والتي هي مجرى مزدوج‎‎(‎‎[[Node.js/stream|Duplex]])‎‎  ‎) إلّا إذا أشار ‎[واصف الملفات (fd <code>2</code>)] إلى ملف، في تلك الحالة تكون مجرى [[Node.js/stream|Writable]].


تختلف process.stderr عن باقي مجاري Node.js في نواحي مهمة، انظر ملاحظة على عمليات الدخل والخرج للمزيد من المعلومات.
تختلف <code>process.stderr</code> عن باقي مجاري Node.js في نواحي مهمة، انظر [[Node.js/process#.D9.85.D9.84.D8.A7.D8.AD.D8.B8.D8.A9 .D8.B9.D9.84.D9.89 .D8.B9.D9.85.D9.84.D9.8A.D8.A7.D8.AA .D8.A7.D9.84.D8.AF.D8.AE.D9.84 .D9.88.D8.A7.D9.84.D8.AE.D8.B1.D8.AC|ملاحظة على عمليات الدخل والخرج]] للمزيد من المعلومات.


هذه الميزة ليست متوافرة في خيوط Worker.
هذه الميزة ليست متوافرة في خيوط [[Node.js/worker|Worker]].


== process.stdin ==
== <code>process.stdin</code> ==
* <Stream>
* [[node.js/stream|<Stream>]]
تعيد الخاصية process.stdin مجرى متصل إلى stdin‏ [واصف الملفات ‎‎[‎(fd ‎0‎)‎. هي net.Socket (والتي هي مجرى مزدوج (Duplex)) إلّا إذا كان [واصف الملفات 0 ‎‎[‎(fd ‎0‎)‎ يشير إلى ملف. في تلك الحالة تكون مجرى Readable.<syntaxhighlight lang="javascript">
تعيد الخاصية <code>process.stdin</code> مجرى متصل إلى <code>stdin</code>‏ [واصف الملفات ‎‎[‎(fd ‎<code>0</code>‎)‎. هي [[Node.js/net#.D8.A7.D9.84.D8.B5.D9.86.D9.81 net.Socket|net.Socket]] (والتي هي مجرى مزدوج ([[Node.js/stream|Duplex]])) إلّا إذا كان [واصف الملفات ‎‎[‎(fd <code>‎0</code>‎)‎ يشير إلى ملف. في تلك الحالة تكون مجرى [[Node.js/stream|Readable]].<syntaxhighlight lang="javascript">
process.stdin.setEncoding('utf8');
process.stdin.setEncoding('utf8');


سطر 1٬079: سطر 1٬081:
   process.stdout.write('end');
   process.stdout.write('end');
});
});
</syntaxhighlight>بما أنّها مجرى مزدوج (Duplex)، يمكن أن تُستخدم process.stdin في النمط "old" أيضًا والذي يكون متوافقًا مع السكربتات المكتوبة من أجل إصدارات Node.js قبل ‎0‎.‎10‎‎. للمزيد من المعلومات انظر توافق المجاري (Stream compatibility).
</syntaxhighlight>بما أنّها مجرى مزدوج ([[Node.js/stream|Duplex]])، يمكن أن تُستخدم <code>process.stdin</code> في النمط "old" أيضًا والذي يكون متوافقًا مع السكربتات المكتوبة من أجل إصدارات Node.js قبل ‎0‎.‎10‎‎. للمزيد من المعلومات انظر توافق المجاري ([[Node.js/stream|Stream compatibility]]).


مجرى الدخل القياسي stdin متوقف افتراضيًا في نمط المجاري "old". لذلك يجب على الفرد استدعاء process.stdin.resume(‎)‎ للقراءة منه. لاحظ أيضًا أنّ استدعاء process.stdin.resume(‎)‎ بحد ذاته سوف يحول المجرى إلى النمط القديم "old" .
مجرى الدخل القياسي <code>stdin</code> متوقف افتراضيًا في نمط المجاري "old". لذلك يجب على الفرد استدعاء <code>process.stdin.resume(‎)</code>‎ للقراءة منه. لاحظ أيضًا أنّ استدعاء <code>process.stdin.resume(‎)</code>‎ بحد ذاته سوف يحول المجرى إلى النمط القديم "old" .


هذه الميزة ليست متوافرة في خيوط Worker.
هذه الميزة ليست متوافرة في خيوط [[Node.js/Stream|Worker]].


== process.stdout ==
== <code>process.stdout</code> ==
* <Stream>
* [[node.js/stream|<Stream>]]
تعيد الخاصية process.stdout مجرى متصل إلى stdout [واصف الملفات ‏‎(fd 1)‎]. هي net.Socket (والتي هي مجرى مزدوج (Duplex)) إلّا إذا كان [واصف الملفات ‏‎(fd 1)‎] يشير إلى ملف، في هذه الحالة هو مجرى كتابة Writable.
تعيد الخاصية <code>process.stdout</code> مجرى متصل إلى <code>stdout</code> [واصف الملفات ‏‎(fd <code>1</code>)‎]. هي [[Node.js/net#.D8.A7.D9.84.D8.B5.D9.86.D9.81 net.Socket|net.Socket]] (والتي هي مجرى مزدوج ([[Node.js/stream|Duplex]])) إلّا إذا كان [واصف الملفات ‏‎(fd <code>1</code>)‎] يشير إلى ملف، في هذه الحالة هو مجرى كتابة [[Node.js/stream|Writable]].


على سبيل المثال، لنسخ process.stdin إلى process.stdout:<syntaxhighlight lang="javascript">
على سبيل المثال، لنسخ <code>process.stdin</code> إلى <code>process.stdout</code>:<syntaxhighlight lang="javascript">
process.stdin.pipe(process.stdout);
process.stdin.pipe(process.stdout);


</syntaxhighlight>تختلف process.stdout عن باقي مجاري Node.js في نواحي مهمة، انظر ملاحظة على عمليات الدخل والخرج للمزيد من المعلومات.
</syntaxhighlight>تختلف <code>process.stdout</code> عن باقي مجاري Node.js في نواحي مهمة، انظر [[Node.js/process#.D9.85.D9.84.D8.A7.D8.AD.D8.B8.D8.A9 .D8.B9.D9.84.D9.89 .D8.B9.D9.85.D9.84.D9.8A.D8.A7.D8.AA .D8.A7.D9.84.D8.AF.D8.AE.D9.84 .D9.88.D8.A7.D9.84.D8.AE.D8.B1.D8.AC|ملاحظة على عمليات الدخل والخرج]] للمزيد من المعلومات.


هذه الميزة ليست متوافرة في خيوط Worker.
هذه الميزة ليست متوافرة في خيوط [[Node.js/Stream|Worker]].


=== ملاحظة على عمليات الدخل والخرج ===
=== ملاحظة على عمليات الدخل والخرج ===
تختلف process.stdout و process.stderr عن باقي مجاري Node.js في نواحي مهمة:
تختلف <code>process.stdout</code> و <code>process.stderr</code> عن باقي مجاري Node.js في نواحي مهمة:
# تُستخدم داخليًا من قبل console.log(‎)‎ و console.error(‎)‎، على التوالي وبالترتيب.
# تُستخدم داخليًا من قبل [[Node.js/console#console.log.28.5Bdata.5D.5B.2C ...args.5D.29.E2.80.8E|console.log(‎)]]‎ و [[Node.js/console#console.error.28.5Bdata.5D.5B.2C ...args.5D.29.E2.80.8E|console.error(‎)‎]]، على التوالي وبالترتيب.
# لا يمكن غلقُه ا(سوف تُرمى end(‎)‎).
# لا يمكن غلقُه ا(سوف تُرمى [[Node.js/stream|end(‎)‎]]).
# لن تطلق الحدث 'finish' أبدًا.
# لن تطلق الحدث [[Node.js/stream|'finish']] أبدًا.
# يمكن أن تكون الكتابة متزامنةً اعتمادًا على ما يرتبط به المجرى وإذا كان النظام ويندوز أو يونكس (أي متوافق مع POSIX)
# يمكن أن تكون الكتابة متزامنةً اعتمادًا على ما يرتبط به المجرى وإذا كان النظام ويندوز أو يونكس (أي متوافق مع POSIX)
#* الملفات: متزامنة على ويندوز و POSIX
#* الملفات: متزامنة على ويندوز و POSIX
#* الطرفية الوهمية التي ينشئها نظام التشغيل TTYs: غير متزامنة على ويندوز ، متزامنة على POSIX.
#* الطرفية الوهمية التي ينشئها نظام التشغيل TTYs: ''غير متزامنة'' على ويندوز ، ''متزامنة'' على POSIX.
#* الأنابيب Pipes (والمقابس sockets): متزامنة على ويندوز، غير متزامنة على POSIX
#* الأنابيب Pipes (والمقابس sockets): ''متزامنة'' على ويندوز، ''غير متزامنة'' على POSIX
يعزى بعض هذا السلوك لأسباب تاريخية، كما أنّ تغييرها قد يخلق عدم توافق مع الإصدارات السابقة، ولكنه أيضًا مُتوقع من قبل بعض المستخدمين.
يعزى بعض هذا السلوك لأسباب تاريخية، كما أنّ تغييرها قد يخلق عدم توافق مع الإصدارات السابقة، ولكنه أيضًا مُتوقع من قبل بعض المستخدمين.


تُجنِّب الكتابة المتزامنة المشاكل مثل التداخل غير المتوقع للخرج المكتوب باستخدام console.log(‎)‎ أو console.error(‎)‎. أو لا تُكتَب نهائيًا إذا استدعي process.exit(‎)‎ قبل أن تنتهي الكتابة غير المتزامنة. انظر process.exit(‎)‎ للمزيد من المعلومات.
تُجنِّب الكتابة المتزامنة المشاكل مثل التداخل غير المتوقع للخرج المكتوب باستخدام <code>console.log(‎)‎</code> أو <code>console.error(‎)</code>‎. أو لا تُكتَب نهائيًا إذا استدعي <code>process.exit(‎)</code>‎ قبل أن تنتهي الكتابة غير المتزامنة. انظر [[Node.js/process#process.exit.28.5Bcode.E2.80.8E.5D.E2.80.8E.29.E2.80.8E|process.exit(‎)]]‎ للمزيد من المعلومات.


تحذير: تَحظرُ الكتابة المتزامنة حلقة الأحداث حتى تكتمل الكتابة. يمكن أن يكون هذا الحظر لحظيًا تقريبًا في حالة الخرج إلى ملف، ولكن تحت تحميل نظام عالي، فالأنابيب (pipes) التي لا تُقرأ في طرف الاستقبال، أو في الطرفيات البطيئة أو أنظمة الملفات، قد تؤدي إلى حظر حلقة الأحداث في أحيانٍ كثيرةٍ وبطولٍ كافٍ للحصول على تأثير أداء شديد السلبية. قد لا تكون (الكتابة المتزامنة) مشكلة عند الكتابة إلى جلسة طرفية تفاعلية، ولكن انظر لذلك بحذر خاص عند تسجيل الناتج إلى مجاري خرج العمليات.
تحذير: تَحظرُ الكتابة المتزامنة حلقة الأحداث حتى تكتمل الكتابة. يمكن أن يكون هذا الحظر لحظيًا تقريبًا في حالة الخرج إلى ملف، ولكن تحت تحميل نظام عالي، فالأنابيب (pipes) التي لا تُقرأ في طرف الاستقبال، أو في الطرفيات البطيئة أو أنظمة الملفات، قد تؤدي إلى حظر حلقة الأحداث في أحيانٍ كثيرةٍ وبطولٍ كافٍ للحصول على تأثير أداء شديد السلبية. قد لا تكون (الكتابة المتزامنة) مشكلة عند الكتابة إلى جلسة طرفية تفاعلية، ولكن انظر لذلك بحذر خاص عند تسجيل الناتج إلى مجاري خرج العمليات.


لتتَحقّق إذا كان هناك مجرى متصل بسياق الطرفية الوهمية التي ينشئها نظام التشغيل (TTY)، تحقق من الخاصية isTTY.
لتتَحقّق إذا كان هناك مجرى متصل بسياق الطرفية الوهمية التي ينشئها نظام التشغيل (TTY)، تحقق من الخاصية <code>isTTY</code>.


على سبيل المثال:<syntaxhighlight lang="javascript">
على سبيل المثال:<syntaxhighlight lang="javascript">
سطر 1٬122: سطر 1٬124:
$ node -p "Boolean(process.stdout.isTTY)" | cat
$ node -p "Boolean(process.stdout.isTTY)" | cat
false
false
</syntaxhighlight>انظر توثيق TTY للمزيد من المعلومات.
</syntaxhighlight>انظر توثيق [[Node.js/tty|TTY]] للمزيد من المعلومات.


== process.throwDeprecation ==
== <code>process.throwDeprecation</code> ==
أُضيفت في الإصدار: 0.9.12.
أُضيفت في الإصدار: 0.9.12.
* <boolean>
* [[JavaScript/Boolean|<boolean>]]
تبيّن الخاصية process.throwDeprecation فيما إذا كانت الراية ‎--throw-deprecation مضبوطة في عملية Node.js الحالية. انظر توثيق 'warning' event و emitWarning() method للمزيد من المعلومات عن سلوك هذه الراية.
تبيّن الخاصية <code>process.throwDeprecation</code> فيما إذا كانت الراية ‎<code>--throw-deprecation</code> مضبوطة في عملية Node.js الحالية. انظر توثيق [[Node.js/process#.D8.A7.D9.84.D8.AD.D8.AF.D8.AB .27warning.27|'warning' event]] و [[Node.js/process#process.emitWarning.28warning.5B.2C type.5B.2C code.5D.5D.5B.2C ctor.E2.80.8E.5D.E2.80.8E.29.E2.80.8E|emitWarning() method]] للمزيد من المعلومات عن سلوك هذه الراية.


== process.title ==
== <code>process.title</code> ==
أُضيفت في الإصدار: 0.1.104.
أُضيفت في الإصدار: 0.1.104.
* <string>
* [[JavaScript/String|<string>]]
تعيد الخاصية process.title عنوان العملية الحالية (بعبارة أخرى تعيد قيمة ps الحالية). إسناد قيمة جديدة إلى process.title يعدّل قيمة ps الحالية.
تعيد الخاصية <code>process.title</code> عنوان العملية الحالية (بعبارة أخرى تعيد قيمة <code>ps</code> الحالية). إسناد قيمة جديدة إلى <code>process.title</code> يعدّل قيمة <code>ps</code> الحالية.


عندما تُسند قيمة جديدة، ستفرض المنصات المختلفة قيودًا مختلفة على حد الطول الأقصى للعنوان. عادة تكون مثل هذه القيود محدودة للغاية. على سبيل المثال، في أنظمة لينُكس وماك ، يكون process.title محدودًا بحجم الاسم الثنائي زائداً طول وسطاء سطر الأوامر. لأن إعدادات process.title تعيد كتابة ذاكرة argv للعملية. يسمح الإصدار 0.8 لبيئة Node.js بسلاسل عناوين عمليات أطول بواسطة إعادة كتابة ذاكرة environ ولكن من المحتمل أن يكون ذلك غير آمن ومربك في بعض الحالات (الغامضة إلى حد ما).
عندما تُسند قيمة جديدة، ستفرض المنصات المختلفة قيودًا مختلفة على حد الطول الأقصى للعنوان. عادة تكون مثل هذه القيود محدودة للغاية. على سبيل المثال، في أنظمة لينُكس وماك ، يكون <code>process.title</code> محدودًا بحجم الاسم الثنائي زائداً طول وسطاء سطر الأوامر. لأن إعدادات <code>process.title</code> تعيد كتابة ذاكرة <code>argv</code> للعملية. يسمح الإصدار 0.8 لبيئة Node.js بسلاسل عناوين عمليات أطول بواسطة إعادة كتابة ذاكرة <code>environ</code> ولكن من المحتمل أن يكون ذلك غير آمن ومربك في بعض الحالات (الغامضة إلى حد ما).


== process.traceDeprecation ==
== <code>process.traceDeprecation</code> ==
أُضيفت في الإصدار: 0.8.0.
أُضيفت في الإصدار: 0.8.0.
* <boolean>
* [[JavaScript/Boolean|<boolean>]]
تبين الخاصية process.traceDeprecation فيما إذا كانت راية ‎-‎-trace-‎deprecation‎ مضبوطةً في عملية Node.js الحالية. انظر توثيق 'warning' event و emitWarning() method للمزيد من المعلومات حول سلوك هذه الراية.
تبين الخاصية <code>process.traceDeprecation</code> فيما إذا كانت راية <code>‎-‎-trace-‎deprecation</code>‎ مضبوطةً في عملية Node.js الحالية. انظر توثيق [[Node.js/process#.D8.A7.D9.84.D8.AD.D8.AF.D8.AB .27warning.27|'warning' event]] و [[Node.js/process#process.emitWarning.28warning.5B.2C type.5B.2C code.5D.5D.5B.2C ctor.E2.80.8E.5D.E2.80.8E.29.E2.80.8E|emitWarning() method]] للمزيد من المعلومات حول سلوك هذه الراية.


== process.umask([mask]‎)‎ ==
== <code>process.umask([mask]‎)‎</code> ==
أُضيف في الإصدار: 0.1.19.
أُضيف في الإصدار: 0.1.19.
* mask <number>
* ‎‎[[JavaScript/Number|<‎number‎‎>]]‎‎ <code>mask</code>
يُجهِّز أو يُعيِد التابع process.umask(‎)‎ قناع أذونات الملفات المُنشَأة من عملية Node.js. ترث العملية الابن القناع من العملية الأب. إذا استدعي هذا التابع دون وسائط يُعاد القناع الحالي، وإلّا فسيضبط umask بقيمة الوسيط ويعاد القناع السابق.<syntaxhighlight lang="javascript">
يُجهِّز أو يُعيِد التابع <code>process.umask(‎)</code>‎ قناع أذونات الملفات المُنشَأة من عملية Node.js. ترث العملية الابن القناع من العملية الأب. إذا استدعي هذا التابع دون وسائط يُعاد القناع الحالي، وإلّا فسيضبط umask بقيمة الوسيط ويعاد القناع السابق.<syntaxhighlight lang="javascript">
const newmask = 0o022;
const newmask = 0o022;
const oldmask = process.umask(newmask);
const oldmask = process.umask(newmask);
سطر 1٬151: سطر 1٬153:
);
);


</syntaxhighlight>هذه الميزة ليست متوافرة في خيوط Worker.
</syntaxhighlight>هذه الميزة ليست متوافرة في خيوط [[node.js/worker|Worker]].


== process.uptime(‎)‎ ==
== <code>process.uptime(‎)</code>‎ ==
أُضيف في الإصدار: 0.5.0.
أُضيف في الإصدار: 0.5.0.
* القيمة المعادة:<number>
* القيمة المعادة:[[JavaScript/Number|<number>]]
يعيد التابع process.uptime(‎)‎ عدد الثواني التي مضت منذ بدء العملية الحالية.
يعيد التابع <code>process.uptime(‎)</code>‎ عدد الثواني التي مضت منذ بدء العملية الحالية.


القيمة المُعادة تتضمن أجزاءً من الثواني. استخدم Math.floor(‎)‎ للحصول على ثوانٍ كاملةٍ.
القيمة المُعادة تتضمن أجزاءً من الثواني. استخدم <code>Math.floor(‎)</code>‎ للحصول على ثوانٍ كاملةٍ.


== process.version ==
== <code>process.version</code> ==
أُضيفت في الإصدار: 0.1.3.
أُضيفت في الإصدار: 0.1.3.
* <string>
* [[JavaScript/String|<string>]]
تعيد الخاصية process.version سلسلةً نصيةً تحتوي إصدار Node.js.<syntaxhighlight lang="javascript">
تعيد الخاصية <code>process.version</code> سلسلةً نصيةً تحتوي إصدار Node.js.<syntaxhighlight lang="javascript">
console.log(`Version: ${process.version}`);
console.log(`Version: ${process.version}`);
</syntaxhighlight>
</syntaxhighlight>


== process.versions ==
== <code>process.versions</code> ==
سجل التغييرات
سجل التغييرات


سطر 1٬175: سطر 1٬177:
|-
|-
|9.0.0.
|9.0.0.
|تتضمن الخاصية v8 الآن لواحق Node.js محدّدة (specific suffix).
|تتضمن الخاصية <code>v8</code> الآن لواحق Node.js محدّدة (specific suffix).
|-
|-
|4.2.0.
|4.2.0.
|دُعمت الخاصية icu الآن.
|دُعمت الخاصية <code>icu</code> الآن.
|-
|-
|0.2.0.
|0.2.0.
|أُضيفت في الإصدار 0.2.0.
|أُضيفت في الإصدار 0.2.0.
|}
|}
* <Object>
* [[JavaScript/Object|<Object>]]
تعيد الخاصية process.versions كائن مُجدوِل لسلسلة إصدرات Node.js واعتماديتها. تبيّن process.versions.modules إصدار ABI الحالي، والذي يزداد كلما تغيرت واجهات C+‎+‎ البرمجية C++ API. سترفض Node.js تحميل وحدات مُصرَّفة (compiled) مع إصدار ABI مختلف.<syntaxhighlight lang="javascript">
تعيد الخاصية <code>process.versions</code> كائن مُجدوِل لسلسلة إصدرات Node.js واعتماديتها. تبيّن <code>process.versions.modules</code> إصدار ABI الحالي، والذي يزداد كلما تغيرت واجهات C+‎+‎ البرمجية C++ API. سترفض Node.js تحميل وحدات مُصرَّفة (compiled) مع إصدار ABI مختلف.<syntaxhighlight lang="javascript">
console.log(process.versions);
console.log(process.versions);
</syntaxhighlight>سوف تولّد كائن مشابهًا إلى:<syntaxhighlight lang="javascript">
</syntaxhighlight>سوف تولّد كائن مشابهًا إلى:<syntaxhighlight lang="javascript">
سطر 1٬205: سطر 1٬207:
== حالات الخروج (Exit Codes) ==
== حالات الخروج (Exit Codes) ==
سوف تنتهي Node.js عادةً بحالة الخروج 0 عندما لا يكون هناك المزيد من العمليات غير المتزامنة المعلّقة. تُستخدم شيفرات الحالة التالية في ظروف أخرى:
سوف تنتهي Node.js عادةً بحالة الخروج 0 عندما لا يكون هناك المزيد من العمليات غير المتزامنة المعلّقة. تُستخدم شيفرات الحالة التالية في ظروف أخرى:
* 1 Uncaught Fatal Exception (استثناء قاتل غير مُلتقط) - يوجد استثناء غير مُلتقط، ولم يعُالج من قبل النطاق (domain) أو معالج الأحداث 'uncaughtException'.
* <code>1</code> '''Uncaught Fatal Exception''' (استثناء قاتل غير مُلتقط) - يوجد استثناء غير مُلتقط، ولم يعُالج من قبل النطاق (domain) أو معالج الأحداث [[Node.js/process#.D8.A7.D9.84.D8.AD.D8.AF.D8.AB .27uncaughtException.27|'uncaughtException']].


* 2 - Unused غير مُستخدمة (محجوزة من قبل Bash من أجل سوء الاستخدام الضمني)
* <code>2</code> - Unused غير مُستخدمة (محجوزة من قبل Bash من أجل سوء الاستخدام الضمني)


* 3 Internal JavaScript Parse Error (خطأ إعراب/تحليل JavaScript داخلي)
* <code>3</code> '''Internal JavaScript Parse Error''' (خطأ إعراب/تحليل JavaScript داخلي)
تسببت شيفرة JavaScript المصدرية الداخلية بخطأ تحليلي في عملية تمهيد تشغيل Node.js. هذا نادر للغاية، وعمومًا يمكن أن يحدث فقط خلال تطوير Node.js نفسها.
تسببت شيفرة JavaScript المصدرية الداخلية بخطأ تحليلي في عملية تمهيد تشغيل Node.js. هذا نادر للغاية، وعمومًا يمكن أن يحدث فقط خلال تطوير Node.js نفسها.
* 4 Internal JavaScript Evaluation Failure (فشل تقييم JavaScript داخلي)
* <code>4</code> '''Internal JavaScript Evaluation Failure''' (فشل تقييم JavaScript داخلي)
تفشل شيفرة JavaScript المصدرية الداخلية بإعادة قيمة تابع عند التقييم في عملية تمهيد تشغيل Node.js. هذا نادر للغاية، وعمومًا يمكن أن يحدث فقط خلال تطوير Node.js نفسها.
تفشل شيفرة JavaScript المصدرية الداخلية بإعادة قيمة تابع عند التقييم في عملية تمهيد تشغيل Node.js. هذا نادر للغاية، وعمومًا يمكن أن يحدث فقط خلال تطوير Node.js نفسها.
* 5 Fatal Error (خطأ قاتل)
* <code>5</code> <code>Fatal Error</code> (خطأ قاتل)
وجِد خطأ قاتل لا يمكن إصلاحه في V8. نموذجيًا سوف تُطبع رسالة إلى مجرى الخطأ القياسي stderr مع البادئة FATAL ERROR.
وجِد خطأ قاتل لا يمكن إصلاحه في V8. نموذجيًا سوف تُطبع رسالة إلى مجرى الخطأ القياسي stderr مع البادئة <code>FATAL ERROR</code>.
* 6 Non-function Internal Exception Handler (معالج الاستثناءات الداخلي منعدم الدالة)
* <code>6</code> '''Non-function Internal Exception Handler''' (معالج الاستثناءات الداخلي منعدم الدالة)
وجِد استثناء غير مُلتقط، ولكن بطريقة ما ضُبطت دالة معالج الاستثناءات القاتلة الداخلية إلى منعدم-دالة، ولا يمكن استدعائها.
وجِد استثناء غير مُلتقط، ولكن بطريقة ما ضُبطت دالة معالج الاستثناءات القاتلة الداخلية إلى منعدم-دالة، ولا يمكن استدعائها.
* 7 Internal Exception Handler Run-Time Failure (فشل وقت التشغيل لمعالج
* <code>7</code> '''Internal Exception Handler Run-Time Failure''' (فشل وقت التشغيل لمعالج
الاستثناء الداخلي)
الاستثناء الداخلي)


وُجِد استثناء غير مُلتقط، ورمت دالة معالجة الاستثناءات القاتلة الداخلية بنفسها خطأً عند محاولة معالجته [الخطأ الأول]. يمكن أن يحصل هذا، على سبيل المثال، إذا رمى معالج 'uncaughtException' أو domain.on('error‎'‎)‎ خطأً.
وُجِد استثناء غير مُلتقط، ورمت دالة معالجة الاستثناءات القاتلة الداخلية بنفسها خطأً عند محاولة معالجته [الخطأ الأول]. يمكن أن يحصل هذا، على سبيل المثال، إذا رمى معالج 'uncaughtException' أو <code>domain.on('error‎'‎)</code>‎ خطأً.
* 8 - Unused. غير مستخدمة
* <code>8</code> - Unused. غير مستخدمة
في الإصدارات السابقة من Node.js كانت حالة الخروج 8 تُعبّر أحيانًا عن استثناء غير مُلتقط.
في الإصدارات السابقة من Node.js كانت حالة الخروج 8 تُعبّر أحيانًا عن استثناء غير مُلتقط.
* 9 - Invalid Argument (وسيط غير صالح)
* <code>9</code> - '''Invalid Argument''' (وسيط غير صالح)
إمّا أنه حُدد خيار غير معروف أو أنّ الخيار الذي يتطلب قيمة زُوِد بدون قيمة.
إمّا أنه حُدد خيار غير معروف أو أنّ الخيار الذي يتطلب قيمة زُوِد بدون قيمة.
* 10 Internal JavaScript Run-Time Failure (فشل JavaScript داخلي وقت التشغيل)
* <code>10</code> '''Internal JavaScript Run-Time Failure''' (فشل JavaScript داخلي وقت التشغيل)
ترمي شيفرة JavaScript المصدرية الداخلية خطأً عند استدعاء دالة تمهيد التشغيل في عملية تمهيد تشغيل Node.js. هذا نادر للغاية، وعمومًا يمكن أن يحصل فقط خلال تطوير Node.js نفسها.
ترمي شيفرة JavaScript المصدرية الداخلية خطأً عند استدعاء دالة تمهيد التشغيل في عملية تمهيد تشغيل Node.js. هذا نادر للغاية، وعمومًا يمكن أن يحصل فقط خلال تطوير Node.js نفسها.
* 12 Invalid Debug Argument (وسيط تنقيح غير صالح)
* <code>12</code> '''Invalid Debug Argument''' (وسيط تنقيح غير صالح)
تُجهّز الخيارات ‎-‎‎-‎‎inspect‎‎ أو/و ‎-‎‎-‎‎inspect-‎‎brk‎‎ ، لكن رقم المنفذ المختار غير صالح أو غير متوافر.
تُجهّز الخيارات <code>‎-‎‎-‎‎inspect‎‎</code> أو/و <code>‎-‎‎-‎‎inspect-‎‎brk‎‎</code> ، لكن رقم المنفذ المختار غير صالح أو غير متوافر.
* >128 Signal Exits مخارج الإشارات
* <code>>128</code> Signal Exits مخارج الإشارات
إذا تلقّت Node.js إشارةً قاتلةً مثل SIGKILL أو SIGHUP، عندها ستكون حالة الخروج تساوي 128 إضافةً إلى قيمة شيفرة الإشارة. هذه ممارسة POSIX قياسية، منذ أن عُرِّفت حالات الخروج لتكون عدد صحيح ذو 7 بتات، ومخارج الإشارات تضع البت الأعلى ترتيبًا، ومن ثم تُضَمِّن قيمة شيفرة الإشارة، على سبيل المثال، قيمة الإشارة SIGABRT هي لذلك ستكون حالة الخروج هي 128+أو 134.
إذا تلقّت Node.js إشارةً قاتلةً مثل <code>SIGKILL</code> أو <code>SIGHUP</code>، عندها ستكون حالة الخروج تساوي <code>128</code> إضافةً إلى قيمة شيفرة الإشارة. هذه ممارسة POSIX قياسية، منذ أن عُرِّفت حالات الخروج لتكون عدد صحيح ذو 7 بتات، ومخارج الإشارات تضع البت الأعلى ترتيبًا، ومن ثم تُضَمِّن قيمة شيفرة الإشارة، على سبيل المثال، قيمة الإشارة <code>SIGABRT</code> هي <code>6</code>، لذلك ستكون حالة الخروج هي <code>128+6</code>، أو <code>134</code>.


== مصادر ==
== مصادر ==
* [https://nodejs.org/dist/latest-v10.x/docs/api/process.html صفحة Process في توثيق Node.js الرسمي.]
* [https://nodejs.org/dist/latest-v10.x/docs/api/process.html صفحة Process في توثيق Node.js الرسمي.]
[[تصنيف:Node.js]]
[[تصنيف:Node.js|{{SUBPAGENAME}}]]

المراجعة الحالية بتاريخ 11:18، 23 أكتوبر 2018

يكون الكائن process عامًا (global) والذي يزود معلومات عن عملية Node.js الحالية ورقابةً عليها، كونه كائنًا عامًا فهو متوافر دومًا لتطبيقات Node.js دون استخدام ()require.

أحداث Process

الكائن process هو نسخة من EventEmitter.

الحدث 'beforeExit'

أُضيف في الإصدار: 0.11.12.

يُطلَق الحدث 'beforeExit' عندما تفرغ Node.js من حلقة الأحداث (event loop) ولا يوجد عمل إضافي لجدولته. بشكل طبيعي، عملية Node.js سوف تنتهي عندما لا يكون هناك عمل مجدولٌ، لكن المُنصِت المسجِّل لحدث 'beforeExit' يمكن أن يعمل استدعاءات غير متزامنة، وبذلك يسبب استمرار عملية Node.js .

تُستدعى دالة رد نداء المنصت مع قيمة process.exitCode المُمررة كوسيط وحيد.

لا يُطلَق الحدث 'beforeExit' لأجل حالات تسبب إنهاء صريح، مثل استدعاء ()process.exit أو استثناءات غير مُلتقطة.

لا ينبغي أن يُستخدم 'beforeExit' كبديل للحدث 'exit' إلّا إذا كان القصد هو جدولة عمل إضافي.

الحدث 'disconnect'

أُضيف في الإصدار: 0.7.7.

إذا وُلِّدت عملية Node.js عبر قناة الاتصالات ما بين العمليات IPC (انظر توثيق Child Process و Cluster)، سوف يُطلَق الحدث 'disconnect' عندما تُغلق قناة IPC.

الحدث 'exit'

أُضيف في الإصدار: 0.1.7.

يُطلَق الحدث 'exit' عندما تكون عملية Node.js على وشك الخروج كنتيجة لأحد أمرين:

  • استدعاء التابع ()process.exit بشكل صريح؛
  • لم تعد تحوي حلقة أحداث Node.js أي عمل إضافي ليُنجز.

لا توجد طريقة لمنع خروج حلقة الأحداث في هذه النقطة، وحالما ينتهي تنفيذ كل مُنصتات 'exit' سوف تنتهي عملية Node.js.

تُستدعى دالة رد النداء مع حالة الخروج؛ إمّا بخاصية process.exitCode أو بوسيط exitCode المُمرر للتابع process.exit(‎)‎.

process.on('exit', (code) => {
  console.log(`About to exit with code: ${code}`);
});

دوال المُنصت يجب أن تُنجِز عمليات متزامنة فقط. سوف تنتهي عملية Node.js مباشرةً بعد استدعاء مُنصتات الحدث 'exit' متسببًة بتجاهل أي عمل إضافي بقي في طابور حلقة الأحداث. في المثال التالي لن يُنفَّذ ما ضمن الدالة setTimeout:

process.on('exit', (code) => {
  setTimeout(() => {
    console.log('This will not run');
  }, 0);
});

الحدث 'message'

أُضيف في الإصدار: 0.5.10.

إذا وُلِّدت عملية Node.js عبر قناة الاتصالات ما بين العمليات IPC (انظر توثيق Child Process و Cluster)، يُطلِق الحدث 'message' حالما تُستقبل الرسالة المُرسلة بواسطة العملية الأب باستخدام ()childprocess.send من قبل العملية الابن.

تمر الرسالة عبر مراحل التسلسل والتحليل النحوي، لذا قد لا تكون الرسالة الناتجة مثل الأصل الذي أُرسِل.

الحدث 'rejectionHandled'

أُضيف في الإصدار: 1.4.1.

  • promise‏ ‏<Promise>: الوعد المُعالج المتأخر.

يُطلَق الحدث 'rejectionHandled' كلما رُفض الوعد Promise وأُرفق بمُعالج الأخطاء (على سبيل المثال، باستخدام ()promise.catch) متأخرةً عن حلقة أحداث Node.js بدور واحد.

سيكون الكائن Promise مُطلَقًا سابقًا في الحدث 'unhandledRejection'، لكن خلال دورة المعالجة حصل على مُعالِج الرفض.

لا يوجد دليل على مستوى عالي لأجل سلسلة Promise التي ستُعالج فيها المرفوضات دائمًا، كونها أصلاً غير متزامنة بطبيعتها، فيمكن أن يُعالج رفض Promise في نقطة مستقبلية في الزمن- ربما (المُعالجة) متأخرةً بكثير عن دور حلقة الأحداث الذي يأخذه حدث 'unhandledRejection' ليُطلق.

طريقة ثانية للتعبير عن ذلك، غير شبيهة بالشيفرة المتزامنة و حيث يوجد لائحة متزايدة دومًا من الاستثناءات غير المُعالجة، في الوعود Promises يمكن أن يكون هناك لائحة متزايدة-و-متناقصة من الرفض غير المُعَالج.

في الشيفرة المتزامنة، يُطلَق الحدث 'uncaughtException' عندما تزداد لائحة الاستثناءات غير المعالجة.

في الشيفرة غير المتزامنة يُطلَق الحدث 'unhandledRejection' عندما تزداد لائحة المرفوضات غير المُعالجة، ويُطلَق الحدث 'rejectionHandled' عندما تتناقص لائحة المرفوضات غير المُعالجة.

const unhandledRejections = new Map();
process.on('unhandledRejection', (reason, promise) => {
  unhandledRejections.set(promise, reason);
});
process.on('rejectionHandled', (promise) => {
  unhandledRejections.delete(promise);
});

في هذا المثال، سوف تزداد Map (خريطة) unhandledRejections وتتناقص بمرور الوقت، عاكسةً المرفوضات التي بدأت غير مُعالجة ثم أصبحت مُعالجة، من الممكن تسجيل مثل هذه الأخطاء في سجل أخطاء، إمّا دوريًا (والذي يبدو الأفضل من أجل التطبيقات طويلة التشغيل)أو عند خروج العملية (والذي يبدو الأنسب للبرامج النصية scripts).

الحدث 'uncaughtException'

أُضيف في الإصدار: 0.1.18.

يُطلق الحدث 'uncaughtException'  عندما تصعد استثناءات JavaScript غير المُلتقطة إلى حلقة الأحداث (event loop) في Node.js. بشكل افتراضي، تعالج Node.js مثل هذه الاستثناءات بطباعة التتبع التكديسي (stack trace) إلى مجرى الخطأ القياسي، stderr والخروج من العملية مع حالة الخروج 1. متجاوزةً أي تهيئة سابقة للخاصية process.exitCode. إضافة معالج للحدث 'uncaughtException' يعيد تعريف سلوكه الافتراضي. قد تُغيِّر أنت أيضًا الخاصية process.exitCode في معالج 'uncaughtException' مما سيؤدي إلى إنهاء العملية مع حالة الخروج المُحدَّدة، وإذا لم يوجد مثل هذا المعالج فسوف تخرج العملية مع حالة الخروج 0.

يُستدعى تابع المنصت مع الكائن Error المُمرر كوسيط وحيد.

process.on('uncaughtException', (err) => {
  fs.writeSync(1, `Caught exception: ${err}\n`);
});

setTimeout(() => {
  console.log('This will still run.');
}, 500);

// تسبب استثناء عمداَ ولكن لا تُمسكه
nonexistentFunc();
console.log('This will not run.');

تحذير: استخدام 'uncaughtException' بشكل صحيح

لاحظ أنّ 'uncaughtException' هو آلية خام لمعالجة الاستثناء ويُعتمد استخدامها فقط كحل أخير. لا ينبغي أن يستخدم هذا الحدث كبديل لآلية On Error Resume Next. الاستثناءات غير المعالجة الموروثة تعني أن التطبيق في حالة غير مُعرّفة. السعي لاستئناف شيفرة التطبيق بدون الاستعادة الصحيحة من الاستثناء قد تسبب أمور إضافية طارئة ولا يمكن التنبؤ بها.

الاستثناءات المرمية من داخل مُعالج الأحداث لا يمكن التقاطها، عوضًا عن ذلك ستنتهي العملية بحالة خروج غير صفرية وسوف يُطبع نص تتبع المكدس. هذا من أجل تفادي التعاودية اللا متناهية.

محاولة الاستئناف الطبيعي بعد الاستثناء غير المُلتقط يمكن أن تكون شبيهة بسحب كبل الطاقة عند تحديث الحاسوب- تسعة مرات من عشرة لن يحصل شيء- لكن في المرة العاشرة، سيصبح النظام تالفًا.

الاستخدام الصحيح للحدث 'uncaughtException' هو إجراء تنظيف متزامن للموارد المحجوزة (على سبيل المثال، واصفات الملفات، المُعالجات/المقابض، ...إلخ.) قبل إيقاف تشغيل العملية. ليس من الآمن استئناف عملية عادية بعد 'uncaughtException'.

لإعادة تشغيل تطبيق معطّل بطريقة أكثر موثوقيةً، سواءً كان 'uncaughtException' مُطلقًا أو لا، ينبغي توظيف مراقب خارجي في عملية منفصلة لكشف فشل التطبيق والاستعادة أو إعادة التشغيل حسب الحاجة.

الحدث: 'unhandledRejection'

سجل التغييرات

الإصدار التغييرات
7.0.0. أُهمِلَت مرفوضات Promise غير المُعالجة.
6.6.0. مرفوضات Promise غير المُعالجة سوف تبعث الآن تحذير process warning.
1.4.1. أُضيف في الإصدار 1.4.1.

يُبعث الحدث 'unhandledRejection' كلّما رُفض وعد  Promise ولم يرفق معالج أخطاء بالوعد خلال دور من حلقة الأحداث. عند البرمجة مع الوعود، تُغلّف الاستثناءات "ك وعود مرفوضة". المرفوضات يمكن أن تُلتقط وتُعالج باستخدام ()promise.catch وتُنشر خلال سلسلة Promise. الحدث 'unhandledRejection' مفيد من أجل كشف و حفظ مسار الوعود التي رُفضت والتي لم تُعالَج مرفوضاتها بعد.

تُستدعى دالة المُنصت مع الوسائط التالية:

  • reason‏ ‏‎<‎Error‎> ‎| ‎<any‎>‎: الكائن الذي رُفض الوعد معه (عادةً ما يكون كائن Error)
  • p :الوعد Promise الذي رُفِض
process.on('unhandledRejection', (reason, p) => {
  console.log('Unhandled Rejection at:', p, 'reason:', reason);
//تسجيل دخول محدد التطبيق ، راميًا خطأ أو منطق برمجي آخر هنا
});

somePromise.then((res) => {
  return reportToUser(JSON.pasre(res)); // (`pasre`) لاحظ الخطأ المطبعي
}); // `.catch()` أو `.then()`لا يوجد

ستؤدي الشيفرة الآتية إلى إطلاق الحدث 'unhandledRejection':

function SomeResource() {
// مبدئيًا يضبط الحالة المُحمّلة إلى وعد مرفوض
  this.loaded = Promise.reject(new Error('Resource not yet loaded!'));
}

const resource = new SomeResource();
//لدور واحد على الأقل resource.loaded‎ على catch أو .then ‎لايوجد

في حالة هذا المثال، يمكن تتبع الرفض كخطأ مطوِّر(developer error) كما تكون الحالة النموذجية لأحداث 'unhandledRejection' الأخرى. لعنونة مثل هذا الفشل، يمكن أن يُرفق معالج ‎‏‎‎‎‏‎.‎catch‎(() => { }‎)‎‎‎‎‎‎‎ غير العملياتي

(non-operational ‎.‎catch‎(() => { }‎)‎‎‎‎‎‎‎‎) ب resource.loaded ، والذي سيمنع الحدث 'unhandledRejection' من الإطلاق. بدلًا من ذلك، يمكن أن يُستخدم الحدث 'rejectionHandled'.

الحدث 'warning'

أُضيف في الإصدار: 6.0.0.

الخصائص الرئيسة/المفتاحية للتحذير warning هي:

  • name‏ <string>: اسم التحذير. القيمة الافتراضية:'Warning' .
  • message<string>: توصيف مزوّد من قبل النظام عن التحذير.
  • stack<string>: المسار المُكدَّس/التتبع التكديسي للمكان في الشيفرة حيث أُصدر التحذير.

يُطلق الحدث 'warning' كلّما أطلق Node.js تحذير عملية (process warning).

تحذير العملية (process warning) شبيهٌ بالخطأ في أنّه يوصّف ظروفًا استثنائيةً والتي تسترعي انتباه المستخدم. لكن التحذيرات ليست جزءًا من تدفق معالجة الأخطاء الطبيعي في Node.js و JavaScript. تستطيع Node.js إطلاق تحذيرات كلّما كشفت عن ممارسات شيفرة سيئة يمكن أن تقود إلى أداء تطبيق دون المستوى الأمثل، أو أخطاء، أو ثغرات أمنية.

process.on('warning', (warning) => {
  console.warn(warning.name);  //يطبع اسم التحذير
  console.warn(warning.message);   //يطبع رسالة التحذير
  console.warn(warning.stack);  //التتبع التكديسي‎ يطبع
});

افتراضيًا، سوف تطبع Node.js تحذيرات عمليات (process warning) إلى مجرى الخطأ القياسي stderr. يمكن أن يُستخدم خيار سطر الأوامر ‎-‎‎-‎no-‎warnings‎ لكتم مخرجات console (وحدة التحكم) الافتراضية لكن الحدث 'warning' سيبقى مُطلقًا من قبل الكائن process. يوضّح المثال التالي التحذير الذي يُطبع إلى مجرى الخطأ القياسي stderr عندما تُضاف الكثير من المُنصتات إلى حدث ما:

$ node
> events.defaultMaxListeners = 1;
> process.on('foo', () => {});
> process.on('foo', () => {});
> (node:38638) MaxListenersExceededWarning: Possible EventEmitter memory leak
detected. 2 foo listeners added. Use emitter.setMaxListeners() to increase limit

بالمقابل، يطفئ المثال التالي خرج التحذير الافتراضي ويضيف مُعالج مخصص لحدث 'warning':

$ node --no-warnings
> const p = process.on('warning', (warning) => console.warn('Do not do that!'));
> events.defaultMaxListeners = 1;
> process.on('foo', () => {});
> process.on('foo', () => {});
> Do not do that!

يمكن أن يُستخدم خيار سطر الأوامر ‎-‎-‎trace-‎warnings‎ للحصول على خرج وحدة التحكم console الافتراضي للتحذيرات متضمنًا المسار المكدَّس/التتبع التكديسي الكامل للتحذير.

تشغيل Node.js باستخدام خيار سطر الأوامر ‎-‎-‎throw-‎deprecation‎ سوف يسبب إلقاء تحذيرات مُهملة/منخفضة الأهمية مخصصة (custom deprecation warnings) كاستثناءات.

سيسبب استخدام خيار سطر الأوامر ‎-‎-‎trace-‎deprecation‎ طباعة التحذيرات المُهملة المخصصة إلى مجرى الخطأ القياسي stderr مع المسار المكدَّس/التتبع التكديسي.

سوف يكتم استخدام خيار سطر الأوامر ‎-‎-‎no-‎deprecation‎ كل التقارير عن التحذيرات المُهملة المخصصة.

ستؤثر خيارات سطر الأوامر ‎*‎-‎deprecation‎ فقط على التحذيرات التي تستخدم الاسم 'DeprecationWarning'

إصدار تحذيرات مخصصة

انظر التابع process.emitWarnin‎g()‎ لإصدار تحذيرات مُخصصة أو خاصة بالتطبيق.

أحداث الإشارات (Signal Events)

سوف تُطلق أحداث الإشارة عندما تستقبل عملية Node.js إشارةً، رجاءً راجع signal(7)‎ من أجل لائحة أسماء إشارات POSIX (واجهة نظام التشغيل المحمولة لأنظمة يونكس) القياسية مثل 'SIGINT' و 'SIGHUP'  ...إلخ.

سوف يستقبل مُعالج الإشارة اسم الاشارة ('SIGINT' أو 'SIGTERM' أو ...إلخ.) كأول وسيط.

سيكون اسم كل حدث هو الاسم الشائع للحدث وبحالة الأحرف الكبيرة (مثال 'SIGINT' من أجل إشارات SIGINT).

// لذلك لن تنتهي العملية stdin بدء القراءة من مجرى الدخل القياسي
process.stdin.resume();

process.on('SIGINT', () => {
  console.log('Received SIGINT. Press Control-D to exit.');
});

//استخدام دالة وحيدة لمعالجة إشارات متعددة
function handle(signal) {
  console.log(`Received ${signal}`);
}

process.on('SIGINT', handle);
process.on('SIGTERM', handle);

  • 'SIGUSR1': محجوزة من قبل Node.js من أجل بدء المُنقّح (debugger)، من الممكن تنصيب مُنصت ولكن فعل ذلك قد يؤدي إلى تداخل مع المُنقّح.
  • 'SIGTERM' و 'SIGINT': تملك مُعالجات افتراضية على منصات غير ويندوز (أنظمة تشغيل مختلفة عن ويندوز) والتي ستعيد ضبط حالة الطرفية إلى حالتها الافتراضية قبل الخروج (العودة من الصدفة) بحالة خروج تساوي 128 + رقم الإشارة ‎(‎128‎ +‎ signal‎ number‎)‎‎. إذا كانت إحدى هذه الإشارات تمتلك مُنصتًا مُنصّبًا(موجودًا لتغيير آلية معالجة الإشارة)، سوف يُزال سلوكها الافتراضي (ولن تنتهي عملية Node.js حينئذٍ).
  • 'SIGPIPE': مُهملة افتراضيًا، يمكن أن تملك مُنصتًا مُنصبًا (موجوداً لمعالجة الإشارة بآلية خاصة).
  • 'SIGHUP': تُولّد في ويندوز عندما تُغلق نافذة الطرفية/وحدة التحكم console، وعلى المنصات الأخرى تحت ظروف شتى مشابهة، انظر signal(7)‎. يمكن أن تملك مُنصتًا منصبًا، ولكن Node.js سوف تُنهى بشكل غير مشروط من قبل ويندوز بعد حوالي 10 ثواني. على منصات غير ويندوز، السلوك الافتراضي للحدث SIGHUP هو إنهاء Node.js، لكن حالما يُنصّب المنصت سوف يُزال سلوكه الافتراضي.
  • 'SIGTERM': ليست مدعومةً في ويندوز، يمكن الانصات عليها.
  • 'SIGINT': مدعومة من قبل الطرفية على جميع المنصات، ويمكن توليدها عادة ب ‎<‎Ctrl>‎+‎C‎ (بالرغم أن ذلك قد يكون قابلًا للضبط)، لا تُولّد عندما يكون النمط الخام للطرفية مفعلاً.
  • 'SIGBREAK': تُرسل في ويندوز عندما يُضغط <Ctrl>+<Break>، على منصات غير ويندوز يمكن الاستماع لها، ولكن لا يوجد طريقة لإرسالها أو توليدها.
  • 'SIGWINCH': تُرسل عندما يُغيّر حجم الطرفية/وحدة التحكم console في الويندوز، سوف يحصل هذا فقط في الكتابة على وحدة التحكم عندما يُحرّك المؤشر، أو عندما تكون tty (الطرفية الوهمية التي ينشئها نظام التشغيل) القابلة للقراءة مُستخدمة في الوضع الخام.
  • 'SIGKILL': لا يمكن أن تمتلك مُنصتًا مُنصّبًا (لمعالجة الإشارة بآلية خاصة)، سوف تُنهي Node.js بشكل غير مشروط على جميع المنصات.
  • 'SIGSTOP': لا يمكن أن تمتلك مُنصتًا مُنصّبًا (لمعالجة الإشارة بآلية خاصة).
  • 'SIGBUS 'و 'SIGFPE' و'SIGSEGV' و 'SIGILL': عندما لا تُثار صناعيًا باستخدام kill(‎2‎‎)‎، تترك العملية بشكل متأصل في حالة ليس آمنًا منها محاولة استدعاء مُنصتات JS، القيام بذلك قد يقود إلى تعليق العملية في حلقة لا نهائية، بما أن المُنصتات المرفقة باستخدام process.on(‎)‎ تُستدعى بشكل غير متزامن فهي غير قادرة على تصحيح المشكلة الأساسية.

لا يدعم ويندوز إرسال الإشارات، لكن Node.js توفر بعض المحاكاة مع التوابع process.kill(‎)‎ و subprocess.kill(‎)‎. إرسال الإشارة 0 يمكن أن يُستخدم لاختبار وجود العملية. إرسال SIGINT و SIGTERM و SIGKILL يسبب انهاءً غير مشروطٍ للعملية الهدف.

process.abort(‎)‎

أُضيف في الإصدار: 0.7.0.

يسبب التابع process.abort(‎‎)‎ خروج عملية Node.js مباشرة وتوليد ملف نواة (core file).

هذه الميزة ليست متوفرة في خيوط Worker.

Process.arch

أُضيفت في الإصدار: 0.5.0.

تعيد الخاصية process.arch سلسلة نصية مُعرِّفةً البنية المعمارية لوحدة المعالجة المركزية CPU لنظام التشغيل والذي بُنيت فيه Node.js الثنائية.

القيم الحالية الممكنة هي:

'arm'، و'arm64'، و'ia32'، و'mips'، و'mipsel'، و'ppc'، و'ppc64'، و's390'، و's390x'، و'x32'، و'x64'.

console.log(`This processor architecture is ${process.arch}`);

process.argv

أُضيفت في الإصدار: 0.1.27.

تعيد الخاصية process.argv مصفوفةً متضمنةً على وسطاء سطر الأوامر المُمررة عندما شُغّلت عملية Node.js. سيكون العنصر الأول process.execPath. انظر process.argv0 إذا كان هناك حاجة للوصول إلى القيمة الأصلية للوسيط argv[‎0‎]‎. سوف يكون العنصر الثاني مسار إلى ملف JavaScript قيد التنفيذ. العناصر المتبقية ستكون أي وسطاء إضافية لسطر الأوامر.

على سبيل المثال، بافتراض السكربت التالي باسم process-args.js:

//يطبع process.argv
process.argv.forEach((val, index) => {
  console.log(`${index}: ${val}`);
});

تشغيل عملية Node.js مثلَ:

$ node process-args.js one two=three four

سيولّد الناتج الآتي:

0: /usr/local/bin/node
1: /Users/mjr/work/node/process-args.js
2: one
3: two=three
4: four

process.argv0

أُضيفت في الإصدار: 6.4.0.

تُخزِّن الخاصية process.argv0 نسخة قابلة للقراءة فقط من القيم الأصلية للوسيط argv[‎0‎]‎ مُمررةً عندما تبدأ Node.js.

$ bash -c 'exec -a customArgv0 ./node'
> process.argv[0]
'/Volumes/code/external/node/out/Release/node'
> process.argv0
'customArgv0'

Process.channel

أُضيفت في الإصدار: 7.1.0.

إذا وُلِّدت عملية Node.js عبر قناة الاتصالات ما بين العمليات IPC (انظر توثيق العملية الابن Child Process) تكون الخاصية process.channel مرجعًا لقناة الاتصال ما بين العمليات IPC. إذا لم توجد قناة IPC، تكون هذه الخاصية غير معرّفة undefined.

process.chdir(directory‎)‎

أُضيف في الإصدار: 0.1.17.  

يغير التابع process.chdir‎(‎)‎ مجلد العمل الحالي لعملية Node.js أو يرمي استثناءً إذا فشل ذلك (على سبيل المثال، إذا كان directory المحدد غير موجود).

console.log(`Starting directory: ${process.cwd()}`);
try {
  process.chdir('/tmp');
  console.log(`New directory: ${process.cwd()}`);
} catch (err) {
  console.error(`chdir: ${err}`);
}

هذه الميزة غير متوافرة في خيوط Worker‏‎.‏‎‎

process.config

أُضيفت في الإصدار: 0.7.7.

تعيد الخاصية process.config كائن Object حاوي على تمثيل JavaScript لخيارات التهيئة المستخدمة لبناء الملف التنفيدي لبرمجية Node.js الحالية القابلة للتنفيذ. وهذا مثل ملف config.gypi الذي يُنتج عند تشغيل سكربت الضبط (أي السكربت ‎/‎‎configure‎.).

يبدو مثال عن المخرجات المحتملة مثل:

{
  target_defaults:
   { cflags: [],
     default_configuration: 'Release',
     defines: [],
     include_dirs: [],
     libraries: [] },
  variables:
   {
     host_arch: 'x64',
     node_install_npm: 'true',
     node_prefix: '',
     node_shared_cares: 'false',
     node_shared_http_parser: 'false',
     node_shared_libuv: 'false',
     node_shared_zlib: 'false',
     node_use_dtrace: 'false',
     node_use_openssl: 'true',
     node_shared_openssl: 'false',
     strict_aliasing: 'true',
     target_arch: 'x64',
     v8_use_snapshot: 'true'
   }
}

الخاصية process.config ليست للقراءة فقط وهناك وحدات موجودة في في النظام الذي توفره Node.js تُعرَّف للتوسّع أو التعديل أو تبديل كلي لقيمة process.config.

process.connected

أُضيفت في الإصدار: 0.7.2.

إذا وُلِّدت عملية Node.js عبر قناة الاتصالات ما بين العمليات IPC (انظر توثيق Child Process وCluster) سوف تعيد الخاصية process.connected القيمة true طالما كانت قناة IPC متصلة وستعيد القيمة false بعد أن يُستدعى التابع process.disconnect(‎)‎.

حالما تصبح قيمة process.connected خطأ (false)، لا يعود من الممكن إرسال رسائل عبر قناة IPC باستخدام التابع process.send(‎)‎.

process.cpuUsage([previousValue‎]‎)‎

أُضيف في الإصدار: 6.1.0.

  • previousValue‏ ‎:<Object>‎ قيمة سابقة مُعادة من استدعاء التابع process.cpuUsage(‎)‎.
  • القيمة المعادة: <Object>

يعيد التابع process.cpuUsage(‎)‎ وقت المُستخدِم ووقت نظام وحدة المعالجة المركزية CPU المُستخدم في العملية الحالية، في كائن مع الخاصيتين user و system، حيث قيمهما هي قيم بالميكرو ثانية (مليون من الثانية). تقيس هذه القيم الوقت المُنفق في شيفرة المستخدم والنظام على الترتيب، وقد تنتهي بكونه (الوقت) أكبر من الوقت الفعلي المنقضي إذا كانت وحدة معالجة مركزية متعددة النوى تنجز العمل لهذه العملية.

يمكن أن تُمرر نتيجة استدعاء سابق للتابع process.cpuUsage(‎)‎ كوسيط للدالة، للحصول على قراءة مختلفة.

const startUsage = process.cpuUsage();
// { user: 38579, system: 6986 }
//{ المستخدم: 38579, النظام: 6986 }


//جعل المعالج يدور ل 500 ميلي ثانية
const now = Date.now();
while (Date.now() - now < 500);

console.log(process.cpuUsage(startUsage));
// { user: 514883, system: 11226 }
// { المستخدم: 514883, النظام: 11226 }

process.cwd(‎)

أُضيف في الإصدار: 0.1.8.

يعيد التابع process.cwd(‎)‎ مجلد العمل الحالي لعملية Node.js.

console.log(`Current directory: ${process.cwd()}`);

process.debugPort

أُضيفت في الإصدار: 0.7.2.

المَنفذ المستخدم من قبل المُنقّح (debugger) الخاص ب Node.js عندما يُفعّل.

process.debugPort = 5858;

process.disconnect(‎)‎

أُضيف في الإصدار: 0.7.2.

إذا وُلِّدت عملية Node.js عبر قناة الاتصالات ما بين العمليات IPC (انظر توثيق Child Process و Cluster)، سيُغلِق التابع process.disconnect(‎)‎ قناة IPC للعملية الأب، سامحةً للعملية الابن بالانتهاء بأمان حالما لا تتواجد أي اتصالات أخرى تبقيها حية.

تأثير استدعاء process.disconnect‎(‎‎)‎‎ هو مثل استدعاء العملية الأب للتابع ChildProcess.disconnect(‎)‎.

إذا كانت عملية Node.js غير مُولَّدة بقناة الاتصال ما بين العمليات IPC، سيكون process.disconnect‎(‎‎)‎‎ غير معرّف undefined.

‎process.dlopen(module, filename[, flags‎]‎)‎

سجل التغييرات

الإصدار التغييرات
9.0.0. إضافة الدعم للوسيط  flags.
0.1.16. أُضيف في الإصدار 0.1.16.

يسمح التابع process.dlopen(‎)‎ بتحميل الكائنات المُشتركة المحلية ديناميكيًا. إنّه يُستخدم في الأصل من خلال require(‎)‎ من أجل تحميل إضافات ++C، ولا ينبغي أن يُستخدم مباشرة، إلّا في حالات خاصة. بعبارة أخرى، ينبغي تفضيل require(‎)‎ على process.dlopen(‎)‎، مالم تكن هناك أسباب محددة.

الوسيط flags هو عدد صحيح يسمح بتحديد سلوك dlopen. انظر توثيق os.constants.dlopen للتفاصيل.

إذا كان هناك أسباب محددة لاستخدام process.dlopen(‎)‎ (على سبيل المثال، لضبط رايات dlopen)، فمن المفيد غالبًا استخدام require.resolve(‎)‎ للبحث عن مسار الوحدة.

هنالك عائق مهم عند استدعاء process.dlopen(‎)‎ هو أن نسخة من الكائن/الصنف module يجب أن تُمرر. سيكون الوصول إلى التوابع المُصدّرة من قبل إضافات C+‎+‎ ممكنًا عبر module.exports.

يعرض المثال في الأسفل كيفية تحميل إضافة C+‎+‎. مسماة binding، وتُصدّر كدالة foo. سوف تُحمّل كل الرموز قبل عودة الاستدعاء، عبر تمرير الثابت RTLD_NOW. يُفترَض في هذا المثال أن يكون الثابت RTLD_NOW متوافرًا:

const os = require('os');
process.dlopen(module, require.resolve('binding'),
               os.constants.dlopen.RTLD_NOW);
module.exports.foo();

process.emitWarning(warning[, options]‎)‎

أُضيف في الإصدار: 8.0.0.

  • warning‏ ‎<string> | <Error>‎‎: التحذير الذي سيُطلق
  • options‎<Object>
    • type‏<string>‎: عندما يكون التحذير warning هو سلسلة نصية String، يكون النوع type هو الاسم المُستخدم لنوع التحذير الذي يُطلق. القيمة الافتراضية: 'Warning'.
    • code‏ ‎<string>‎: مُعرِّف فريد لنسخة التحذير التي ستُطلق.
    • ctor‏ ‎<Function>‎: عندما يكون warning هو سلسلة نصية String، يكون ctor تابع اختياري يُستخدم للحد من المسار التتبع التكديسي المتولد. القيمة الإفتراضية: process.emitWarning.
    • detail‏ ‎<string>‎: نص إضافي ليدرج مع الخطأ.

يمكن أن يُستخدم التابع process.emitWarning(‎)‎ لإطلاق تحذيرات عمليات (process warnings) مُحددة التطبيق أو مخصصة. يمكن الإنصات إليها بإضافة معالج إلى حدث 'warning'.

// إطلاق تحذير مع رمز وتفاصيل أخرى
process.emitWarning('Something happened!', {
  code: 'MY_WARNING',
  detail: 'This is some additional information'
});
//تطلق:‏
// (node:56338) [MY_WARNING] Warning: Something happened!
// This is some additional information هذه بعض المعلومات الإضافية

في هذا المثال، وُلِّد كائن خطأ Error داخليًا من قبل التابع process.emitWarning(‎)‎ و مُرر إلى معالج 'warning'

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);  //التتبع التكديسي‎

  console.warn(warning.detail);  // 'This is some additional information'

});

إذا مُرر التحذير warning ككائن Error ، يُهمل الوسيط options.

process.emitWarning(warning[, type[, code]][, ctor‎]‎)

أُضيف في الإصدار: 6.0.0.

  • warning‏‎<string> | <Error> ‎‎: التحذير الذي سيُطلق.
  • type‏ ‎<string>‎: عندما يكون التحذير warning هو سلسلة نصية String، يكون type هو الاسم المُستخدم لنوع التحذير الذي يُطلق. القيمة الإفتراضية: 'Warning'
  • code‏ ‎<string>‎: مُعرِّف فريد لنسخة التحذير الذي يُطلق.
  • ctor‏ ‎<Function>‎: عندما يكون التحذير warning هو سلسلة نصية String، يُستخدمctor كتابع اختياري للحد من التتبع التكديسي المتولّد. القيمة الإفتراضية: process.emitWarning.

يمكن أن يُستخدم التابع process.emitWarning(‎)‎ لإطلاق تحذيرات عمليات (process warnings) محددة التطبيق أو مخصصة. يمكن الإنصات إليها بإضافة معالج إلى حدث 'warning'.

//إطلاق تحذير باستخدام سلسلة
process.emitWarning('Something happened!');
// Emits: (node: 56338) Warning: Something happened!
// تطلق :(node: 56338) التحذير: Something happened!
// .تطلق تحذير باستخدام سلسلة ونوع
process.emitWarning('Something Happened!', 'CustomWarning');
// Emits: (node:56338) CustomWarning: Something Happened!
//تطلق:(node:56338) CustomWarning:Something Happened!
process.emitWarning('Something happened!', 'CustomWarning', 'WARN001');
// Emits: (node:56338) [WARN001] CustomWarning: Something happened!
// تطلق: (node:56338) [WARN001] CustomWarning: Something happened!

في كل من الأمثلة السابقة، يُولّد كائن Error داخليًا من قبل التابع process.emitWarning(‎)‎ ويُمرر عبرها إلى معالج 'warning'.

process.on('warning', (warning) => {
  console.warn(warning.name);
  console.warn(warning.message);
  console.warn(warning.code);
  console.warn(warning.stack);
});

إذا مُرر التحذير warning ككائن Error، سوف يُمرر عبر معالج الحدث 'warning' غير معدلٍ (وسوف تُهمل الوسطاء الإختيارية type و code و ctor):

// Error إطلاق تحذير باستخدام كائن 
const myWarning = new Error('Something happened!');
//  لتحديد اسم النوع Error استخدام خاصية اسم الكائن
myWarning.name = 'CustomWarning';
myWarning.code = 'WARN001';

process.emitWarning(myWarning);
// Emits: (node:56338) [WARN001] CustomWarning: Something happened!
//تطلق: (node:56338) [WARN001] CustomWarning: Something happened!

يرمى خطأ مطبعي TypeError إذا كان التحذير warning هو أي شيء غير السلسلة النصية أو كائن Error.

لاحظ أنّه بينما تستخدم تحذيرات العمليات (process warning) كائنات Error، آلية تحذير العمليات ليست بديلة لآلية معالجة الأخطاء العادية.

تُنفذ المعالجة الإضافية التالية إذا كان نوع (type) التحذير هو 'DeprecationWarning':

  • إذا استُخدِم خيار سطر الأوامر ‎-‎-‎throw‎-‎deprecation‎، سيُلقى التحذير المُهمل كاستثناء بدلًا من إطلاقه كحدث.
  • إذا استُخدِم خيار سطر الأوامر ‎-‎-‎no‎-‎deprecation‎، سيُكبت التحذير المُهمل.
  • إذا استُخدم خيار سطر الأوامر ‎-‎-‎trace‎-‎deprecation‎ ، سيُطبَع التحذير المُهمل إلى مجرى الخطأ القياسي stderr مع التتبع التكديسي الكامل.

تجنب التحذيرات المُكرّرة (Avoiding duplicate warnings)

من المستحسن أن تُطلق التحذيرات مرة فقط لكل العملية. لفعل ذلك، يُنصح بوضع التابع emitWarning(‎)‎ بعد اختبارٍ منطقيٍ بسيط كما هو موضح في المثال أدناه:

function emitMyWarning() {
  if (!emitMyWarning.warned) {
    emitMyWarning.warned = true;
    process.emitWarning('Only warn once!');
  }
}
emitMyWarning();
// Emits: (node: 56339) Warning: Only warn once!
//تطلق: (node: 56339) Warning: Only warn once!
emitMyWarning();
// Emits nothing
// تطلق لاشيء

process.env

سجل التغييرات

الإصدار التغييرات
10.0.0. أُهمل التحويل الضمني لقيمة المتحول إلى سلسلة نصية
0.1.27. أُضيفت في الإصدار 0.1.27

ستعيد الخاصية process.env كائنًا حاويًا على بيئة المستخدم. انظر environ(‎7‎)‎ .

يبدو مثالٌ عن الكائن شبيهًا بالكائن الآتي:

{
  TERM: 'xterm-256color',
  SHELL: '/usr/local/bin/bash',
  USER: 'maciej',
  PATH: '~/.bin/:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin',
  PWD: '/Users/maciej',
  EDITOR: 'vim',
  SHLVL: '1',
  HOME: '/Users/maciej',
  LOGNAME: 'maciej',
  _: '/usr/local/bin/node'
}

يمكن تعديل هذا الكائن، ولكن مثل هذه التعديلات لن تنعكس خارج عملية Node.js . بعبارة أخرى، المثال التالي لن يعمل:

$ node -e 'process.env.foo = "bar"' && echo $foo

بينما سيعمل المثال التالي:

process.env.foo = 'bar';
console.log(process.env.foo);

إسناد الخاصية process.env سوف يحول القيمة ضمنيًا إلى سلسلة نصية، أُهمل هذا السلوك. سترمي النسخ المستقبلية من Node.js خطأً عندما لا تكون القيمة سلسلة نصية أو عدد أو قيمة منطقية. مثال:

process.env.test = null;
console.log(process.env.test);
// => 'null'
process.env.test = undefined;
console.log(process.env.test);
// => 'undefined'

استخدم المعامل delete لحذف خاصية من process.env. مثال:

process.env.TEST = 1;
delete process.env.TEST;
console.log(process.env.TEST);
// => undefined
//=> غير معرّف

في نظام التشغيل ويندوز، تكون متغيرات البيئة غير حساسة لحالة الأحرف. مثال:

process.env.TEST = 1;
console.log(process.env.test);
// => 1

الخاصية process.env قابلة للقراءة فقط في خيوط Worker.

process.execArgv

أُضيفت في الإصدار: 0.7.7.

تعيد الخاصية process.execArgv مجموعة من خيارات سطر الأوامر الخاصة ببيئة Node.js والمُمرَّرة عندما تُشغّل عملية Node.js. لا تظهر هذه الخيارات في المصفوفة المُعادة من قبل الخاصية process.argv، ولا تتضمن هذه المصفوفة اسم الملف التنفيذي لبيئة Node.js، ولا اسم السكربت المُشغَّل، ولا أيّ خيارات تلي اسم السكربت. هذه الخيارات مفيدة من أجل توليد عملية ابن بنفس بيئة التنفيذ للعملية الأب.

$ node --harmony script.js --version

يُنتِج ما سبق القيمة الآتية المخزّنة في الخاصية process.execArgv:

['--harmony']

وفي process.argv:

['/usr/local/bin/node', 'script.js', '--version']

process.execPath

أُضيفت في الإصدار: 0.1.100.

تعيد الخاصية process.execPath المسار المطلق للملف التنفيذي الذي يبدأ عملية Node.js:

'/usr/local/bin/node'

process.exit([code‎]‎)‎

أُضيف في الإصدار: 0.1.13.

  • <integer>code: حالة الخروج. القيمة الإفتراضية: 0

التابع process.exit(‎)‎ يأمر Node.js إنهاء العملية بشكل متزامن مع حالة الخروج code. إذا حُذف code، يستخدم الخروج إمّا حالة النجاح '‎‎success‎‎' وقيمته 0 أو قيمة الخاصية process.exitCode إذا ضُبطت. لن تنتهي Node.js حتى تُستدعى جميع مُنصتات الحدث 'exit'.

للانهاء مع حالة الفشل 'failure' :

process.exit(1);

ينبغي أن ترى الصدفة التي نفّذت Node.js حالة الخروج ‎.‎1

استدعاء process.exit(‎)‎ سيجبر العملية على الانتهاء بأقصى سرعة ممكنة حتى لو بقيت هناك عمليات (operations) غير متزامنة معلّقة ولم تنته بالكامل بعد. متضمنةً عمليات الدخل والخرج I/O إلى process.stdout و process.stderr.

في معظم الحالات، ليس من الضروري فعليًا الاستدعاء الصريح للتابع process.exit(‎)‎. سوف تنتهي عملية Node.js من تلقاء نفسها إذا لم يوجد أي عمل إضافي مُعلّق في حلقة الأحداث. يمكن أن تُضبط الخاصية process.exitCode لتُعلِم العملية أي حالة خروج عليها أن تُستخدَم عندما تنتهي العملية بأمان.

على سبيل المثال، يوضّح المثال التالي سوء استخدام للطريقة process.exit(‎)‎ والذي يمكن أن يقود إلى تقطيع وضياع البيانات المطبوعة إلى مجرى الخرج القياسي stdout.

// :هذا مثال على ما *لا* يجب فعله
if (someConditionNotMet()) {
  printUsageToStdout();
  process.exit(1);
}

الدافع إلى هذه الإشكالية هو بسبب أنّ الكتابة إلى process.stdout في Node.js تكون أحيانًا غير متزامنة ويمكن أن تحدث خلال عدة وحدات لحلقة أحداث Node.js. لكن استدعاء process.exit(‎)‎ يجبر العملية على الانتهاء قبل أن تُنجز تلك الكتابة الإضافية إلى مجرى الخرج القياسي stdout. بدلًا من استدعاء process.exit(‎)‎ مباشرةً، ينبغي ضبط رمز process.exitCode والسماح للعملية بإنهاء طبيعي من خلال تجنب جدولة أي عمل إضافي لحلقة الأحداث.

// كيف تُجهِّز حالة الخروج/الانتهاء بشكل صحيح بينما تسمح للعملية بالانتهاء بسلام
if (someConditionNotMet()) {
  printUsageToStdout();
  process.exitCode = 1;
}

إذا كان من الضروري إنهاء عملية Node.js بسبب حالة خطأ، فإنّ إلقاء خطأ غير مُلتقط والسماح للعملية بالإنهاء وفق ذلك هو أكثر أمانًا من استدعاء process.exit(‎)‎.

في خيوط Worker، توقف هذه الدالة الخيط الحالي بدلًا من العملية الحالية.

process.exitCode

أُضيفت في الإصدار: 0.11.8.

الرقم الذي سيكون حالة الخروج للعملية، إمّا عندما تنتهي العملية بسلام أو تُنهى بواسطة التابع process.exit(‎)‎ بدون تحديد حالة خروج.

تعيين حالة خروج للتابع process.exit(‎code‎)‎ سوف يتجاوز أي إعدادٍ سابق للخاصية process.exitCode.

process.getegid(‎)‎

أُضيف في الإصدار: 2.0.0.

يُعيد التابع process.getegid(‎)‎ المُعرِّف الرقمي للمجموعة الفعالة لعمليةNode.js ‎ (انظر ‎getegid(2‎)‎‎)

if (process.getegid) {
  console.log(`Current gid: ${process.getegid()}`);
}

تتوافر هذه الدالة فقط على منصات POSIX ( أي ليست ويندوز أو أندرويد).

process.geteuid(‎)‎

أُضيف هذا التابع في الإصدار: 2.0.0.

يعيد التابع process.geteuid(‎)‎ المُعرِّف الرقمي للمستخدم الفعّال للعملية. ‎‎(انظر ‎ (geteuid‎(‎2‎‎‎‎)‎‎

if (process.geteuid) {
  console.log(`Current uid: ${process.geteuid()}`);
}

تتوافر هذه الدالة فقط على منصات POSIX (أي ليست ويندوز أو أندرويد).

process.getgid(‎)‎

أُضيف في الإصدار: 0.1.31.

يعيد التابع process.getgid(‎)‎ المُعرِّف الرقمي للمجموعة المالكة لعملية‎ .‎Node.js‎ ‎(انظر ‎(getgid‎(‎‎2‎‎)‎.

if (process.getgid) {
  console.log(`Current gid: ${process.getgid()}`);
}

تتوافر هذه الدالة فقط على منصات POSIX (أي ليست ويندوز أو أندرويد).

process.getgroups(‎)‎

أُضيف في الإصدار: 0.9.4.

القيمة المعادة: <[]integer>.

يعيد التابع process.getgroups(‎)‎ مصفوفةً مع المُعرِّف الرقمي للمجموعة المساعدة. تتركها POSIX غير محددة إذا كان معرّف المجموعة الفعّالة مُضمّنًا ولكن Node.js تضمن ذلك دائمًا.

تتوافر هذه الدالة فقط على منصات POSIX ( أي ليست ويندوز أو أندرويد).

process.getuid(‎)‎

أُضيف في الإصدار: 0.1.28.

القيمة المعادة: <integer>.

يعيد التابع process.getuid(‎)‎ المعرّف الرقمي لمستخدم العملية. (انظر(getuid(2).

if (process.getuid) {
  console.log(`Current uid: ${process.getuid()}`);
}

تتوافر هذه الدالة فقط على منصات POSIX ( أي ليست ويندوز أو أندرويد).

process.hasUncaughtExceptionCaptureCallback‎(‎)‎

أُضيف في الإصدار: 9.3.0.

يحدد فيما إذا ضُبطت دالة رد النداء باستخدام process.setUncaughtExceptionCaptureCallback(‎)‎.

process.hrtime([time‎]‎)‎

أُضيف في الإصدار: 0.7.6.

هذا هو الإصدار القديم من ‎process.hrtime.bigint(‎)‎ قبل أن تُدخل bigint في JavaScript.

يعيد التابع process.hrtime(‎)‎ الزمن الحقيقي الحالي عالي الدقة على شكل مصفوفة Array بالصيغة [seconds, nanoseconds]، إذ إنَّ nanoseconds هو الجزء المتبقي من الزمن الحقيقي والذي لا يمكن تمثيله بدِقة الثواني.

time هو معامل اختياري والذي يجب أن يكون نتيجة الاستدعاء السابق للتابع process.hrtime(‎)‎ ليختلف عن الزمن الحالي. إذا لم يكن المعامل المُمرر مصفوفة غير قابلة للتعديل Array، سوف يُلقى خطأ مطبعي (TypeError). التمرير في مصفوفة معرّفة من قبل المستخدم بدلًا من نتيجة الاستدعاء السابق للتابع 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 //أخذ قياس الأداء 1000000552 نانو ثانية
}, 1000);

process.hrtime.bigint(‎)‎

أُضيف في الإصدار: 10.7.0.

إصدار bigint من التابع process.hrtime(‎)‎ يعيد الزمن الحقيقي الحالي عالي الدقة في bigint.

غير شبيهٍ ب process.hrtime(‎)‎، لايدعم وسيط time إضافي إذ يمُكن أن يُحسب الفرق مباشرةَ بمجرد طرح القيمة المُعادة من التابع bigint المستدعى مرتين.

const start = process.hrtime.bigint();
//نانوثانية ‎191051479007711

setTimeout(() => {
  const end = process.hrtime.bigint();
//نانوثانية ‎191052633396993 

  console.log(`Benchmark took ${end - start} nanoseconds`);
 //أخذ قياس الأداء 1154389282 نانو ثانية
}, 1000);

process.initgroups(user, extraGroup)

أُضيف في الإصدار: 0.9.4.

يقرأ التابع process.initgroups(‎)‎ الملف ‎/‎etc‎/‎group‎ وينشئ لائحة وصول المجموعات، مستخدمًا كل المجموعات التي يكون فيها المستخدم عضواً. هذه عملية ذات امتيازات وتتطلب أن تملك عملية Node.js وصول الجذر root أو صلاحيات CAP_SETGID.

لاحظ أنّه يجب توخي الحذر عند حذف الإمتيازات. مثال:

console.log(process.getgroups());         // [ 0 ]
process.initgroups('bnoordhuis', 1000);  //تبديل المستخدم
console.log(process.getgroups());         // [ 27, 30, 46, 1000, 0 ]
process.setgid(1000);                     // للجذر gid‎‎ حذف 
console.log(process.getgroups());         // [ 27, 30, 46, 1000 ]

تتوافر هذه الدالة فقط على منصات POSIX (أي ليست ويندوز أو أندرويد). هذه الميزة ليست متوافرة في خيوط Worker .

process.kill(pid[, signal‎]‎)‎

أُضيف في الإصدار: 0.0.6.

  • <‎number>pid: معرّف العملية
  • <‎string>‎ |‎ <number>signal: الإشارة التي ستُرسَل إلى العملية، إمّا أن تكون سلسلة أو رقم. القيمة الإفتراضية: 'SIGTERM'

يرسل التابع process.kill(‎)‎ الإشارة signal إلى العملية ذات المُعرِّف pid.

أسماء الإشارات هي سلاسل نصية مثل: 'SIGINT' أو 'SIGHUP'. انظر أحداث الإشارات (Signal Events) و kill(‎2‎‎)‎ للمزيد من المعلومات.

سيرمي هذا التابع خطأ إذا لم يكن مُعرِّفpid الهدف موجودًا. كحالة خاصة، يمكن أن تُستخدم الإشارة 0 لاختبار وجود عملية. سترمي منصات الويندوز خطأ إذا استُخدِم pid لقتل مجموعة العملية.

بالرغم من أن اسم هذه الدالة هو process.kill(‎)‎، هي في الواقع مرسلَة إشارة فقط، مثل نداء النظام kill. قد تفعل الإشارة المرسلة أشياء غير قتل العملية الهدف.

process.on('SIGHUP', () => {
  console.log('Got SIGHUP signal.');
});

setTimeout(() => {
  console.log('Exiting.');
  process.exit(0);
}, 100);

process.kill(process.pid, 'SIGHUP');

عندما تُستقبل SIGUSR1 من قبل عملية Node.js، سوف تبدأ Node.js المُنقِحَ (debugger)، انظر أحداث الإشارات.

process.mainModule

أُضيفت في الإصدار: 0.1.17.

تقدم الخاصية process.mainModule طريقةً بديلةً لاستعادة require.main. الاختلاف هو إذا كانت الوحدة الرئيسة تتغير في وقت التنفيذ، قد تبقى require.main مشيرةً إلى الوحدة الأساسية الأصلية في وحدات طُلبت قبل حدوث التغييرات. عمومًا. من الآمن افتراض أن الاثنتين تشيران إلى الوحدة ذاتها.

مع require.main، ستكون process.mainModule غير معرّفة undefined إذا لم يكن هناك سكربت مَدخِل (entry script).

process.memoryUsage(‎)

سجل التغييرات

الإصدار التغييرات
7.2.0. أُضيفت الخاصية external إلى لكائن المُعاد.
0.1.16. أُضيفت في الإصدار 0.1.16.

يعيد التابع process.memoryUsage(‎)‎ كائن يوصّف استخدام الذاكرة في عملية Node.js مقاسًا بالبايتات.

على سبيل المثال، الشيفرة التالية:

console.log(process.memoryUsage());

سوف تولّد:

{
  rss: 4935680,
  heapTotal: 1826816,
  heapUsed: 650472,
  external: 49879
}

تشير heapTotal و heapUsed إلى استخدام ذاكرة V8. تشير external إلى استخدام الذاكرة لكائنات C+‎+‎ المرتبطة بكائنات JavaScript المُدارة من قبل V8.

Rss، أي Resident Set Size (حجم المجموعة المشغولة)، هو كمية الفراغ المشغول في جهاز الذاكرة الرئيسي (والذي هو مجموعة جزئية من الذاكرة المخصصة الكلية) للعملية، والذي يتضمن الكومة heap، ومقطع الشيفرة code segment، والمكدّس stack.

الكومة heap هي حيث تُخزّن الكائنات والسلاسل النصية و التعابير المغلقة (closures). تخزّن المتحولات في المكدّس stack وتبقى شيفرة JavaScript الفعلية في مقطع الشيفرة (code segment).

عند استخدام خيوط Worker، ستكون rss قيمة متاحة لكامل العملية، بينما ستشير الحقول الأخرى للخيط الحالي فقط.

process.nextTick(callback[, ...args]‎)‎

سجل التغييرات

الإصدار التغييرات
1.8.1. دُعِمت الآن وسائط إضافية بعد callback.
0.1.26. أُضيفت في 0.1.26.
  • <Function‎>‎‎ callback.
  • <‎any>‎‎ args: وسائط إضافية لتُمرر عند استدعاء callback.

يضيف التابع process.nextTick(‎)‎ دالة رد النداء (callback) إلى "رتل النبضة التالية" "next tick queue". حالما يكتمل الدور الحالي من أدوار حلقة الأحداث، سوف تُستدعى كل دوال رد النداء الحالية (callbacks) في رتل النبضة التالية.

هذا ليس بديلاً بسيطًا للتابع setTimeout(fn, 0‎)‎. إنّه أكثر فاعلية بكثير. فهو يعمل قبل أن تنطلق أي أحداث دخل وخرج إضافية (متضمنة المؤقتات) في النبضات اللاحقة لحلقة الأحداث.

console.log('start');
process.nextTick(() => {
  console.log('nextTick callback');
});
console.log('scheduled');
// Output://‎المخرجات:‏‎‎
// start //البدء
// scheduled //المجدول
// nextTick callback //دالة رد النداء في اللحظة التالية

هذا مهم في تطوير الواجهات البرمجية API من أجل إعطاء فرصة للمستخدم لإسناد معالج للأحداث بعد بناء كائن ولكن قبل أن تحدث أي عمليات دخل وخرج I/O.

function MyThing(options) {
  this.setupOptions(options);

  process.nextTick(() => {
    this.startDoingStuff();
  });
}

const thing = new MyThing();
thing.getReadyForStuff();


// الآن وليس من قبل thing.startDoingStuff()‎ تُستدعى

من المهم جدًا للواجهات البرمجية API أن تكون إمّا متزامنة 100% أوغير متزامنة 100%. تأمّل هذا المثال:

//تحذير: لا تستخدمه! مخاطرة سيئة غير آمنة!
function maybeSync(arg, cb) {
  if (arg) {
    cb();
    return;
  }

  fs.stat('file', cb);
}

هذه الواجهة البرمجية API خطيرة بسبب الحالة التالية:

const maybeTrue = Math.random() > 0.5;

maybeSync(maybeTrue, () => {
  foo();
});

bar();

ليس واضحًا أي من foo(‎)‎ أو bar(‎)‎ سوف يُستدعى أولًا. النهج التالي أفضل بكثير:

function definitelyAsync(arg, cb) {
  if (arg) {
    process.nextTick(cb);
    return;
  }

  fs.stat('file', cb);
}

يكون رتل النبضة التالية مُستنزَفًا كليًا كل عبور لحلقة الأحداث قبل أن تُعالج عمليات دخل وخرج إضافية. بالنتيجة، سوف يَحظُرُ الضبط التكراري لتابع رد النداء nextTick(‎)‎ أي عمليات دخل وخرج من الحدوث، تمامًا مثل حلقة while(true‎)‎;‎.

process.noDeprecation

أُضيفت في الإصدار: 0.8.0.

تحدد الخاصية process.noDeprecation فيما إذا كانت راية ‎-‎-‎no‎-‎deprecation‎ مضبوطة في عملية Node.js الحالية. انظر توثيق 'warning' event و emitWarning()method للمزيد من المعلومات حول سلوك هذه الراية.

process.pid

أُضيفت في الإصدار: 0.1.15.

تعيد الخاصية process.pid معرّف العملية (PID) للعملية الحالية.

console.log(`This process is pid ${process.pid}`);

process.platform

أُضيفت في الإصدار: 0.1.16.

تعيد الخاصية process.platform سلسلة نصية مُعرِّفةً منصة نظام التشغيل التي تُشغّل عليها عملية Node.js.

القيم الحالية الممكنة هي:

  • 'aix'
  • 'darwin'
  • 'freebsd'
  • 'linux'
  • 'openbsd'
  • 'sunos'
  • 'win32'
console.log(`This platform is ${process.platform}`);

قد تُعاد أيضًا القيمة 'android' إذا بُنيت Node.js على نظام تشغيل أندرويد. لكن، دعم الأندرويد في Node.js هو تجريبي is experimental.

process.ppid

أُضيفت في الإصدار: 9.2.0.

تعيد الخاصية process.ppid معرّف العملية PID لعملية الأب الحالية.

console.log(`The parent process is pid ${process.ppid}`);

process.release

سجل التغييرات

الإصدار التغييرات
4.2.0. دُعمت الخاصية lts الآن.
3.0.0. أُضيفت في 3.0.0.

تعيد الخاصية process.release كائنًا (Object) حاويًا على البيانات الوصفية المتعلقة بالإصدار الحالي، متضمنةً عناوين URL لأرشيفات tar المصدرية وأرشيفات الترويسات البرمجية فقط.

تضم process.release الخاصيات التالية:

  • <‎string‎>‎‎ ‎name ‎: ستكون القيمة دائمًا عقدة 'node' من أجل Node.js. من أجل الإصدارات القديمة من io.js، ستكون 'io.js'.
  • <‎string‎>‎‎ sourceUrl: عنوان URL مطلق مشير إلى ملف ‎.‎tar.gz الحاوي على الشيفرة المصدرية للإصدار الحالي.
  • <‎string‎>headersUrl‎: عنوان مطلق مُشير إلى ملف ‎.‎tar.gz الحاوي فقط على ملفات الترويسات البرمجية المصدرية للإصدار الحالي. هذه الملفات أصغر بشكل ملحوظ من الملفات المصدرية الكاملة ويمكن أن تُستخدم  لتصريف (compile) الإضافات الأصلية لبيئة Node.js.
  • <‎string‎>‎‎‎libUrl: عنوان مطلق يشير إلى ملف node.lib المطابق للبنية المعمارية والإصدار الحالي. يُستخدم هذا الملف لتصريف (compile) إضافات Node.js أصلية. هذه الخاصية حاضرة فقط لبيئة Node.js المبنية على ويندوز وسوف تكون مفقودة على جميع المنصات الأخرى.
  • ‎‎<‎‎string‎‎>‎‎‎‎ lts: لافتة نصية معرِّفة للافتة LTS (أي Long Term Support، وهي الإصدارات طويلة الدعم) لهذا الإصدار. هذه الخاصية موجودة فقط من أجل إصدارات LTS وهي غير معرّفة undefined من أجل كل أنواع الإصدارات الأخرى متضمنةً الإصدارات الحالية (Current releases). القيم المتوافرة حاليًا تكون:
  • 'Argon'  من أجل خط الدعم طويل الأمد 4‎.‎x‎ LTS‎ البادئ مع 4.2.0.
  • 'Boron' من أجل خط الدعم طويل الأمد ‎6‎.x‎ LTS‎  البادئ مع 6.9.0.
  • 'Boron'  من أجل خط الدعم طويل الأمد ‎8‎‎.‎x‎ LTS‎ البادئ مع 8.9.1.
{
  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'
}

في بُنى مخصصة من الإصدارات التي ليست ضمن قائمة الإصدارات لشجرة المصدر، قد تكون الخاصية name حاضرةً فقط، لا ينبغي الاعتماد على وجود بقية الخاصيات.

process.send(message[, sendHandle[, options]][, callback‎]‎)‎

أُضيف في الإصدار: 0.5.9.

إذا وُلِّدت عملية Node.js عبر قناة الاتصالات ما بين العمليات IPC ، يمكن أن يُستخدم التابع process.send(‎)‎ لإرسال رسائل للعملية الأب. ستُستقبل الرسائل كحدث 'message' في كائن ChildProcess الخاص بالأب.

إذا لم تكن Node.js مُولَّدة بقناة الاتصال ما بين العمليات IPC، سوف تكون process.send(‎)‎ غير معرّفة undefined.

ستمر الرسالة عبر التسلسل والتحليل النحوي، قد لا تكون الرسالة الناتجة تمامًا كالأصلية المرسلة.

process.setegid(id‎)‎

أُضيف في الإصدار: 2.0.0.

يضبط التابع process.setegid(‎)‎ هوية المجموعة الفعّالة للعملية. (انظر setegid‎(‎2‎)‎). يمكن أن يُمرر id إمّا كمعرّف رقمي أو سلسلة اسم المجموعة. إذا كان اسم المجموعة مُحددًا، ينحظر هذا التابع أثناء استبيان (resolving) المعرّف الرقمي المزوّد (the associated a numeric ID).

if (process.getegid && process.setegid) {
  console.log(`Current gid: ${process.getegid()}`);
  try {
    process.setegid(501);
    console.log(`New gid: ${process.getegid()}`);
  } catch (err) {
    console.log(`Failed to set gid: ${err}`);
  }
}

هذه الدالة متوافرة فقط على منصات POSIX ( أي ليست ويندوز أو أندرويد). هذه الميزة ليست متوافرة في خيوط Worker.

process.seteuid(id‎)‎

أُضيف في الإصدار: 2.0.0.

يهيئ التابع process.seteuid(‎)‎ معرّف المستخدم الفعّال للعملية .(انظر seteuid(2‎‎)‎) يمكن أن يُمرر id إمّا كمعرّف رقمي أو سلسلة نصية لاسم المجموعة. إذا كان اسم المستخدم محددًا، ينحظر هذا التابع أثناء استبيان (resolving) المعرّف الرقمي المزوّد (the associated a numeric ID).

if (process.geteuid && process.seteuid) {
  console.log(`Current uid: ${process.geteuid()}`);
  try {
    process.seteuid(501);
    console.log(`New uid: ${process.geteuid()}`);
  } catch (err) {
    console.log(`Failed to set uid: ${err}`);
  }
}

هذه الدالة متوافرة فقط على منصات POSIX (أي ليست ويندوز أو أندرويد). هذه الميزة ليست متوافرة في خيوط Worker.

process.setgid‎(‎id‎)‎

أُضيف في الإصدار: 0.1.31.

يهيئ التابع process.setgid‎()‎ معرّف المجموعة للعملية. (انظر setgid(2‎‎)‎) يمكن أن يُمرر id إمّا كمعرّف رقمي أو سلسلة نصية لاسم المجموعة. إذا كان اسم المجموعة محددًا، ينحظر هذا التابع أثناء استبيان (resolving) المعرّف الرقمي المزوّد (the associated a numeric ID).

if (process.getgid && process.setgid) {
  console.log(`Current gid: ${process.getgid()}`);
  try {
    process.setgid(501);
    console.log(`New gid: ${process.getgid()}`);
  } catch (err) {
    console.log(`Failed to set gid: ${err}`);
  }
}

هذه الدالة متوافرة فقط على منصات POSIX (أي ليست ويندوز أو أندرويد). هذه الميزة ليست متوافرة في خيوط Worker.

process.setgroups(groups)‎

أُضيف في الإصدار: 0.9.4.

يهيء التابع process.setgroups(‎)‎ معرّفات المجموعات المساعدة لعملية Node.js. هذه عملية ذات امتياز والتي تتطلب أن تمتلك عملية Node.js امتيازات الجذر (root) أو الصلاحية CAP_SETGID.

يمكن أن تحتوي المصفوفة groups المعرّفات الرقمية للمجموعات أو أسماء المجموعات أو الاثنتين.

هذه الدالة متوافرة فقط على منصات POSIX (أي ليست ويندوز أو أندرويد). هذه الميزة ليست متوافرة في خيوط Worker.

process.setuid(id)‎

أُضيف في الإصدار: 0.1.28.

يضبط التابع process.setuid()‎ معرّف المستخدم للعملية. (انظر setuid(2‎‎)‎). يمكن أن يُمرر id إمّا كمعرِّف رقمي أو سلسلة اسم مستخدم. إذا كان اسم المستخدم مُحددًا، ينحظر هذا التابع أثناء استبيان (resolving) المعرّف الرقمي المزوّد (the associated a numeric ID).

if (process.getuid && process.setuid) {
  console.log(`Current uid: ${process.getuid()}`);
  try {
    process.setuid(501);
    console.log(`New uid: ${process.getuid()}`);
  } catch (err) {
    console.log(`Failed to set uid: ${err}`);
  }
}

هذه الدالة متوافرة فقط على منصات POSIX (أي ليست ويندوز أو أندرويد). هذه الميزة ليست متوافرة في خيوط Worker.

process.setUncaughtExceptionCaptureCallback(fn‎)‎

أُضيف في الإصدار: 9.3.0.

يهيء التابعُ process.setUncaughtExceptionCaptureCallback(‎)‎ التابعَ الذي سيُستدعى عندما يحصل استثناء غير مُلتقط، والذي سيستقبل قيمة الاستثناء نفسها كوسيطه الأول.

إذا هُيئ مثل هذا التابع، لن يُطلق الحدث 'uncaughtException'. ولن تتوقف العملية إذا مُرر ‎-‎-‎abort-‎on-‎uncaught-‎exception‎ من سطر الأوامر أو هُيء من خلال v8.setFlagsFromString(‎)‎.

لإزالة تهيئة تابع الالتقاط، يمكن أن يُستخدم process.setUncaughtExceptionCaptureCallback(null)‎. إنّ استدعاء هذا التابع مع وسائط غير معدومة non-null بينما يُهيأ تابع التقاط آخر قد يرمي خطأً.

استخدام هذا التابع لا يعتمد على استخدام الوحدة المدمجة المُهملة domain.

process.stderr

تعيد الخاصية process.stderr مجرى متصل إلى ‎stderr‎ [واصف الملفات ‎(‎fd 2‎)‎]. إنّها net.Socket (والتي هي مجرى مزدوج‎‎(‎‎Duplex)‎‎  ‎) إلّا إذا أشار ‎[واصف الملفات (fd 2)] إلى ملف، في تلك الحالة تكون مجرى Writable.

تختلف process.stderr عن باقي مجاري Node.js في نواحي مهمة، انظر ملاحظة على عمليات الدخل والخرج للمزيد من المعلومات.

هذه الميزة ليست متوافرة في خيوط Worker.

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');
});

بما أنّها مجرى مزدوج (Duplex)، يمكن أن تُستخدم process.stdin في النمط "old" أيضًا والذي يكون متوافقًا مع السكربتات المكتوبة من أجل إصدارات Node.js قبل ‎0‎.‎10‎‎. للمزيد من المعلومات انظر توافق المجاري (Stream compatibility).

مجرى الدخل القياسي stdin متوقف افتراضيًا في نمط المجاري "old". لذلك يجب على الفرد استدعاء process.stdin.resume(‎)‎ للقراءة منه. لاحظ أيضًا أنّ استدعاء process.stdin.resume(‎)‎ بحد ذاته سوف يحول المجرى إلى النمط القديم "old" .

هذه الميزة ليست متوافرة في خيوط Worker.

process.stdout

تعيد الخاصية process.stdout مجرى متصل إلى stdout [واصف الملفات ‏‎(fd 1)‎]. هي net.Socket (والتي هي مجرى مزدوج (Duplex)) إلّا إذا كان [واصف الملفات ‏‎(fd 1)‎] يشير إلى ملف، في هذه الحالة هو مجرى كتابة Writable.

على سبيل المثال، لنسخ process.stdin إلى process.stdout:

process.stdin.pipe(process.stdout);

تختلف process.stdout عن باقي مجاري Node.js في نواحي مهمة، انظر ملاحظة على عمليات الدخل والخرج للمزيد من المعلومات.

هذه الميزة ليست متوافرة في خيوط Worker.

ملاحظة على عمليات الدخل والخرج

تختلف process.stdout و process.stderr عن باقي مجاري Node.js في نواحي مهمة:

  1. تُستخدم داخليًا من قبل console.log(‎)‎ و console.error(‎)‎، على التوالي وبالترتيب.
  2. لا يمكن غلقُه ا(سوف تُرمى end(‎)‎).
  3. لن تطلق الحدث 'finish' أبدًا.
  4. يمكن أن تكون الكتابة متزامنةً اعتمادًا على ما يرتبط به المجرى وإذا كان النظام ويندوز أو يونكس (أي متوافق مع POSIX)
    • الملفات: متزامنة على ويندوز و POSIX
    • الطرفية الوهمية التي ينشئها نظام التشغيل TTYs: غير متزامنة على ويندوز ، متزامنة على POSIX.
    • الأنابيب Pipes (والمقابس sockets): متزامنة على ويندوز، غير متزامنة على POSIX

يعزى بعض هذا السلوك لأسباب تاريخية، كما أنّ تغييرها قد يخلق عدم توافق مع الإصدارات السابقة، ولكنه أيضًا مُتوقع من قبل بعض المستخدمين.

تُجنِّب الكتابة المتزامنة المشاكل مثل التداخل غير المتوقع للخرج المكتوب باستخدام console.log(‎)‎ أو console.error(‎)‎. أو لا تُكتَب نهائيًا إذا استدعي process.exit(‎)‎ قبل أن تنتهي الكتابة غير المتزامنة. انظر process.exit(‎)‎ للمزيد من المعلومات.

تحذير: تَحظرُ الكتابة المتزامنة حلقة الأحداث حتى تكتمل الكتابة. يمكن أن يكون هذا الحظر لحظيًا تقريبًا في حالة الخرج إلى ملف، ولكن تحت تحميل نظام عالي، فالأنابيب (pipes) التي لا تُقرأ في طرف الاستقبال، أو في الطرفيات البطيئة أو أنظمة الملفات، قد تؤدي إلى حظر حلقة الأحداث في أحيانٍ كثيرةٍ وبطولٍ كافٍ للحصول على تأثير أداء شديد السلبية. قد لا تكون (الكتابة المتزامنة) مشكلة عند الكتابة إلى جلسة طرفية تفاعلية، ولكن انظر لذلك بحذر خاص عند تسجيل الناتج إلى مجاري خرج العمليات.

لتتَحقّق إذا كان هناك مجرى متصل بسياق الطرفية الوهمية التي ينشئها نظام التشغيل (TTY)، تحقق من الخاصية isTTY.

على سبيل المثال:

$ node -p "Boolean(process.stdin.isTTY)"
true
$ echo "foo" | node -p "Boolean(process.stdin.isTTY)"
false
$ node -p "Boolean(process.stdout.isTTY)"
true
$ node -p "Boolean(process.stdout.isTTY)" | cat
false

انظر توثيق TTY للمزيد من المعلومات.

process.throwDeprecation

أُضيفت في الإصدار: 0.9.12.

تبيّن الخاصية process.throwDeprecation فيما إذا كانت الراية ‎--throw-deprecation مضبوطة في عملية Node.js الحالية. انظر توثيق 'warning' event و emitWarning() method للمزيد من المعلومات عن سلوك هذه الراية.

process.title

أُضيفت في الإصدار: 0.1.104.

تعيد الخاصية process.title عنوان العملية الحالية (بعبارة أخرى تعيد قيمة ps الحالية). إسناد قيمة جديدة إلى process.title يعدّل قيمة ps الحالية.

عندما تُسند قيمة جديدة، ستفرض المنصات المختلفة قيودًا مختلفة على حد الطول الأقصى للعنوان. عادة تكون مثل هذه القيود محدودة للغاية. على سبيل المثال، في أنظمة لينُكس وماك ، يكون process.title محدودًا بحجم الاسم الثنائي زائداً طول وسطاء سطر الأوامر. لأن إعدادات process.title تعيد كتابة ذاكرة argv للعملية. يسمح الإصدار 0.8 لبيئة Node.js بسلاسل عناوين عمليات أطول بواسطة إعادة كتابة ذاكرة environ ولكن من المحتمل أن يكون ذلك غير آمن ومربك في بعض الحالات (الغامضة إلى حد ما).

process.traceDeprecation

أُضيفت في الإصدار: 0.8.0.

تبين الخاصية process.traceDeprecation فيما إذا كانت راية ‎-‎-trace-‎deprecation‎ مضبوطةً في عملية Node.js الحالية. انظر توثيق 'warning' event و emitWarning() method للمزيد من المعلومات حول سلوك هذه الراية.

process.umask([mask]‎)‎

أُضيف في الإصدار: 0.1.19.

يُجهِّز أو يُعيِد التابع process.umask(‎)‎ قناع أذونات الملفات المُنشَأة من عملية Node.js. ترث العملية الابن القناع من العملية الأب. إذا استدعي هذا التابع دون وسائط يُعاد القناع الحالي، وإلّا فسيضبط umask بقيمة الوسيط ويعاد القناع السابق.

const newmask = 0o022;
const oldmask = process.umask(newmask);
console.log(
  `Changed umask from ${oldmask.toString(8)} to ${newmask.toString(8)}`
);

هذه الميزة ليست متوافرة في خيوط Worker.

process.uptime(‎)

أُضيف في الإصدار: 0.5.0.

يعيد التابع process.uptime(‎)‎ عدد الثواني التي مضت منذ بدء العملية الحالية.

القيمة المُعادة تتضمن أجزاءً من الثواني. استخدم Math.floor(‎)‎ للحصول على ثوانٍ كاملةٍ.

process.version

أُضيفت في الإصدار: 0.1.3.

تعيد الخاصية process.version سلسلةً نصيةً تحتوي إصدار Node.js.

console.log(`Version: ${process.version}`);

process.versions

سجل التغييرات

الإصدار التغييرات
9.0.0. تتضمن الخاصية v8 الآن لواحق Node.js محدّدة (specific suffix).
4.2.0. دُعمت الخاصية icu الآن.
0.2.0. أُضيفت في الإصدار 0.2.0.

تعيد الخاصية process.versions كائن مُجدوِل لسلسلة إصدرات Node.js واعتماديتها. تبيّن process.versions.modules إصدار ABI الحالي، والذي يزداد كلما تغيرت واجهات C+‎+‎ البرمجية C++ API. سترفض Node.js تحميل وحدات مُصرَّفة (compiled) مع إصدار ABI مختلف.

console.log(process.versions);

سوف تولّد كائن مشابهًا إلى:

{ http_parser: '2.7.0',
  node: '8.9.0',
  v8: '6.3.292.48-node.6',
  uv: '1.18.0',
  zlib: '1.2.11',
  ares: '1.13.0',
  modules: '60',
  nghttp2: '1.29.0',
  napi: '2',
  openssl: '1.0.2n',
  icu: '60.1',
  unicode: '10.0',
  cldr: '32.0',
  tz: '2016b' }

حالات الخروج (Exit Codes)

سوف تنتهي Node.js عادةً بحالة الخروج 0 عندما لا يكون هناك المزيد من العمليات غير المتزامنة المعلّقة. تُستخدم شيفرات الحالة التالية في ظروف أخرى:

  • 1 Uncaught Fatal Exception (استثناء قاتل غير مُلتقط) - يوجد استثناء غير مُلتقط، ولم يعُالج من قبل النطاق (domain) أو معالج الأحداث 'uncaughtException'.
  • 2 - Unused غير مُستخدمة (محجوزة من قبل Bash من أجل سوء الاستخدام الضمني)
  • 3 Internal JavaScript Parse Error (خطأ إعراب/تحليل JavaScript داخلي)

تسببت شيفرة JavaScript المصدرية الداخلية بخطأ تحليلي في عملية تمهيد تشغيل Node.js. هذا نادر للغاية، وعمومًا يمكن أن يحدث فقط خلال تطوير Node.js نفسها.

  • 4 Internal JavaScript Evaluation Failure (فشل تقييم JavaScript داخلي)

تفشل شيفرة JavaScript المصدرية الداخلية بإعادة قيمة تابع عند التقييم في عملية تمهيد تشغيل Node.js. هذا نادر للغاية، وعمومًا يمكن أن يحدث فقط خلال تطوير Node.js نفسها.

  • 5 Fatal Error (خطأ قاتل)

وجِد خطأ قاتل لا يمكن إصلاحه في V8. نموذجيًا سوف تُطبع رسالة إلى مجرى الخطأ القياسي stderr مع البادئة FATAL ERROR.

  • 6 Non-function Internal Exception Handler (معالج الاستثناءات الداخلي منعدم الدالة)

وجِد استثناء غير مُلتقط، ولكن بطريقة ما ضُبطت دالة معالج الاستثناءات القاتلة الداخلية إلى منعدم-دالة، ولا يمكن استدعائها.

  • 7 Internal Exception Handler Run-Time Failure (فشل وقت التشغيل لمعالج

الاستثناء الداخلي)

وُجِد استثناء غير مُلتقط، ورمت دالة معالجة الاستثناءات القاتلة الداخلية بنفسها خطأً عند محاولة معالجته [الخطأ الأول]. يمكن أن يحصل هذا، على سبيل المثال، إذا رمى معالج 'uncaughtException' أو domain.on('error‎'‎)‎ خطأً.

  • 8 - Unused. غير مستخدمة

في الإصدارات السابقة من Node.js كانت حالة الخروج 8 تُعبّر أحيانًا عن استثناء غير مُلتقط.

  • 9 - Invalid Argument (وسيط غير صالح)

إمّا أنه حُدد خيار غير معروف أو أنّ الخيار الذي يتطلب قيمة زُوِد بدون قيمة.

  • 10 Internal JavaScript Run-Time Failure (فشل JavaScript داخلي وقت التشغيل)

ترمي شيفرة JavaScript المصدرية الداخلية خطأً عند استدعاء دالة تمهيد التشغيل في عملية تمهيد تشغيل Node.js. هذا نادر للغاية، وعمومًا يمكن أن يحصل فقط خلال تطوير Node.js نفسها.

  • 12 Invalid Debug Argument (وسيط تنقيح غير صالح)

تُجهّز الخيارات ‎-‎‎-‎‎inspect‎‎ أو/و ‎-‎‎-‎‎inspect-‎‎brk‎‎ ، لكن رقم المنفذ المختار غير صالح أو غير متوافر.

  • >128 Signal Exits مخارج الإشارات

إذا تلقّت Node.js إشارةً قاتلةً مثل SIGKILL أو SIGHUP، عندها ستكون حالة الخروج تساوي 128 إضافةً إلى قيمة شيفرة الإشارة. هذه ممارسة POSIX قياسية، منذ أن عُرِّفت حالات الخروج لتكون عدد صحيح ذو 7 بتات، ومخارج الإشارات تضع البت الأعلى ترتيبًا، ومن ثم تُضَمِّن قيمة شيفرة الإشارة، على سبيل المثال، قيمة الإشارة SIGABRT هي 6، لذلك ستكون حالة الخروج هي 128+6، أو 134.

مصادر