إنتقل إلى المحتوى الرئيسي

متابعة تشغيل عملية

الهدف​

أن ترى ما فعلته عمليتك حقًا: كل مرة جرت فيها، ولأي منها الخطوات التي اتخذتها بالترتيب — وسبب توقّفها إن توقّفت.

المتطلبات​

  • أن تكون العملية منشورة. المسوّدة لم تجرِ قط.
  • أن تكون صانعًا في تلك البيئة.

أين تجدها​

افتح العملية واختر عمليات التشغيل في الشريط الجانبي، بجوار المسار والنماذج المرافقة. هي المدخل الوحيد هناك الذي ليس شيئًا تحرّره: الاثنان الآخران هما العملية نفسها، وهذه سجلّها.

القائمة​

كل عمليات التشغيل، الأحدث أولًا — عكس قائمة مهامك، وهذا مقصود: الطابور يُعالَج من الأقدم لأنه انتظر أطول، أما من يفتح قائمة التشغيل فيسأل غالبًا عن الذي جرى للتو.

يعرض كل صف وقت البدء، والحالة (قيد التشغيل أو اكتملت أو أُلغيت)، والإصدار الذي بدأت عليه، وفي انتظار.

العمود الذي يجب قراءته: «في انتظار»​

يسمّي الأشخاص الذين ما زال العمل لديهم. وهو ما يميّز التشغيل السليم من المتعثّر:

  • أسماء — التشغيل ينتظر هؤلاء؛ هذا طبيعي وليس مشكلة. والخطوة المعروضة على كل من يحمل دورًا ما تسمّي الثلاثة الأوائل ثم تقول كم بقي؛ والخطوة التي أخذها شخص واحد تسمّي ذلك الشخص.
  • لا أحد، على تشغيل ما زال «قيد التشغيل» — هذا ما ينبغي النظر إليه. لا شيء ينتظر أحدًا ولم ينتهِ بعد، إذن توقّف في مكان ما. افتحه.

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

ملاحظة

اسم لا تعرفه، أو شيء مثل systemuser:9f3c…، يعني أن البيئة لم تستطع الإجابة عن ذلك الشخص — غالبًا مستخدم حُذف بعد إنشاء المهمة.

من يعطّل التشغيل​

تحت المخطّط، يعرض التشغيل الذي ما زال فيه شيء مفتوح قائمة في انتظار: صف لكل خطوة لم يتجاوزها، مع الأشخاص الذين هي لديهم، ومتى بدأ الانتظار، ومدة الانتظار، وموعد الاستحقاق.

هذه هي إجابة السؤال الذي يُفتح به التشغيل المتوقّف عادةً. السجلّ يقول ما جرى، والمخطّط يقول إلى أين وصل؛ ولا يقول أيّ منهما من عليه الدور الآن.

لا يمكنك إنجاز هذه المهام هنا، وهذا مقصود. هذه واجهة صانع التطبيق للآلية، ولا تعمل بصلاحيات الشخص الموجّهة إليه المهمة. العمل يُنجز في قشرة المنصّة: افتح التطبيق، ثم درج المهام في الشريط العلوي.

تمرير مهمّة إلى شخص آخر​

هناك شيء واحد يمكنك فعله بالمهمّة من هنا: تمرير، على الصف نفسه.

استعمله حين يتعذّر على من لديه المهمّة إنجازها — غادر، أو هو غائب، أو وُجّه العمل إلى المجموعة الخطأ. اختر تمرير، ثم اختر شخصًا وأكّد. تخرج المهمّة من يد صاحبها وتُعرض على من سمّيته؛ ويأخذها بفتحها، تمامًا كأي مهمّة أخرى.

هذه صلاحية مختلفة عن تلك التي في قشرة المنصّة، ومن المفيد أن تعرف أيّهما تستعمل. فـتمرير في قائمة مهام الشخص نفسه لا يستعملها إلا من بيده المهمّة — وهي جواب «أنا مسافر». أما هذه فلك لأنك تستطيع فتح هذه الشاشة أصلًا — وهي جواب «شخص ما غادر». وفي الحالتين يجب أن تكون المهمّة ما زالت مفتوحة: القرار الذي اتُّخذ لا يُمرَّر.

التشغيل، خطوة بخطوة — على مخطّط​

اختر تشغيلًا، وفوق سجلّه يُرسم التشغيل نفسه.

ليس مخطّطك وقد أُضيئت فيه الخطوة الحالية، وهذا الفرق هو المقصود. التشغيل يزور الخطوة الواحدة كما يشاء: ردٌّ يعيد العمل يزور الخطوة نفسها ثلاث مرات، وإضاءتها تُريك صندوقًا «زُير» — لا الزيارات الثلاث، ولا ترتيبها، ولا أيّها الذي تنظر إليه.

لذلك يُبسَط التشغيل. شكل لكل خطوة سلكها، بترتيب حدوثها، بأشكالك أنت وبمسارات السباحة التي رسمتها:

  • الخطوة التي بُلغت مرتين تظهر مرتين، والثانية تقول المرور ٢. المرور الثالث هو العمود الثالث، فتُقرأ الحلقة إلى الأمام بدل سهم يرتدّ.
  • مسارات fork صفوف متوازية، يبقى كل منها على سطره ما دام حيًّا، وjoin يسحبها جميعًا إلى الخطوة التي تُكمل منها العملية.
  • موضع التشغيل الآن محدّد بإطار كهرماني وعبارة هنا الآن. وموضع توقّف مسار بإطار أحمر وعبارة توقّف هنا.
  • مسارات السباحة مسـاراتك. شريط لكل مسار سباحة، لا شريط لكل مرور — فالمسار شخص، وشريطا «مدير» يعنيان صفّين لشخص واحد.

وللسجلّ نفسه خمسة أعمدة: متى وقع، وماذا وقع، والخطوة التي وقع عندها، ونوع تلك الخطوة، وأيّ تفاصيل يحملها الحدث — حافة تفرّع، أو مهلة انقضت، أو سبب توقّف رمز.

يقرأ عمود الخطوة اسم الخطوة، الذي أعطيته إيّاها في المصمّم. كان من قبل يطبع المعرّف الذي يولّده المصمّم — n-start، n-3 — وهو لا يقول لأحد شيئًا. والخطوة التي لم تعد في العملية تظهر بمعرّفها، لأنّه الشيء الصحيح الوحيد الباقي عنها.

انقر شكلًا فيضيق السجلّ أدناه إلى تلك الخطوة: ما فعله المحرّك هناك، لا غير. واعرض التشغيل كاملًا يعيده.

يُرسم وفق النسخة التي تعمل​

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

ما الذي جرى، خطوة بخطوة​

يظهر السجلّ بترتيب وقوعه:

ما تراهمعناه
بدأ التشغيل / انتهى التشغيلالمثيل نفسه
وصل إلىبلغت العملية تلك الخطوة
تفرّعاختار تفرّعٌ مخرجًا، ومن أي وصلة مضى
انقسم / التقىأنشأ fork عدة مسارات معًا، وأعادها join
أُنشئت مهمة / اكتملت مهمةذهب عمل إلى شخص، ثم عاد. وتذكر المهمة المكتملة الزر الذي ضُغط ومن ضغطه
انتهى المسار / أُلغي المسارانتهى مسار واحد — والعملية ذات fork لها عدة مسارات
توقّفالأهم: لم تستطع العملية المضيّ، والسبب مكتوب

توقّف هو سبب وجود هذه الشاشة. العملية التي تتوقّف — تفرّع لم يصدُق أي من شروطه، نصّ برمجي لم يُحلَّل، مهمة لم تُسنَد إلى أحد، نتيجة لا وصلة تخرج منها — تسجّل بالضبط ما كان الخطأ لحظة وقوعه. تلك الجملة هي الجواب عن «لماذا لم يحدث شيء».

تشغيل طويل جدًا​

التشغيل الذي دار آلاف المرات له سجلّ أطول مما تعرضه الشاشة. عندها تقول ذلك صراحةً: تُدرج الخطوات الأولى ولا تُدرج البقية. ولا تعرض بصمت أول بضع خطوات كأنها الحكاية كلها.

تشغيل بمسارات كثيرة​

التشغيل الذي تفرّع أكثر مما يستطيع المخطّط رسمه يقول ذلك فوقه: بعض الفروع غائبة عن الصورة. أمّا السجلّ أدناه فغير متأثّر — فهو السِّجل الكامل في الحالتين.

أن تمسك بزمام عملية جارية​

ليست المشاهدة كلّ ما تفعله هذه الشاشة. في شريط العنوان تجد ضوابط تعرضها العملية التي ما تزال جارية — أمّا المنتهية فلا تعرض شيئًا منها، إذ لم يبقَ ما يُمسَك أو يُطلَق أو يُوقَف.

إيقاف مؤقت​

إيقاف مؤقت يمسك العملية. يبقى كلّ مسار وكلّ مهمّة وكلّ موعد استحقاق حيث هو تمامًا، ولا شيء يتحرّك حتى تستأنفها. وتُقرأ العملية موقوفة مؤقتًا لا ملغاة، وهذا فارق مهمّ: الموقوفة مؤقتًا حيّة، ومن يقرأ «ملغاة» سيذهب ليبدأ العملية من جديد.

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

استئناف​

استئناف يُطلقها مرّة أخرى من حيث وقفت بالضبط.

وتوقّع أمرًا واحدًا: المؤقّت الذي حلّ أجله أثناء الإيقاف يعمل فورًا. مضت اللحظة ولا تُعاد إلى العملية — خطوة كانت تنتظر إلى الجمعة واستُؤنفت الاثنين تأخذ خطوتها الاثنين.

إيقاف​

إيقاف ينهي العملية نهائيًا. يقف كلّ مسار حيث هو، وتُسحب المهامّ التي وضعتها في صناديق الأشخاص — فلا يبقى أحد يحمل قرارًا لا عملية خلفه. ويُنفَّذ معالج عند الإلغاء الخاصّ بالعملية، وهي اللحظة الوحيدة التي يُنفَّذ فيها.

يُطلب منك التأكيد، ويُسأل عن السبب. السبب اختياري — «أوقفها» تعليمة كاملة — لكنّه يُكتب في السجلّ، وهو حيث سينظر أوّل من يسأل لاحقًا «ماذا جرى لهذه».

ولا تُبدأ عملية موقوفة من هنا مجدّدًا. ابدأ العملية من جديد بدلًا من ذلك.

مسار توقّف، وإعادة المحاولة​

حين يعجز مسار عن إتمام خطوته، تظهر فوق المهامّ المفتوحة لوحة المسارات المتوقفة: سطر لكلّ مسار يسمّي الخطوة التي توقّف عندها، وبجانبه إعادة المحاولة.

يقول السجلّ لماذا توقّف — تفرّعٌ لم يصدق أيّ شرط فيه، نصّ لم يُحلَّل، سجلّ لم يكن موجودًا. عالج السبب أوّلًا؛ ثمّ تعيد إعادة المحاولة المسارَ إلى الخطوة وتطلبها مرّة ثانية.

أمران يستحقّان المعرفة:

  • تُنفَّذ النسخة التي عليها العملية، كأيّ خطوة أخرى. فإعادة نشر العملية لا تغيّر ما تنفّذه عملية جارية، ولا يُصلَح عيبٌ في التصميم بإعادة النشر ثمّ إعادة المحاولة — ستفشل تلك العملية بالطريقة نفسها. إنّما إعادة المحاولة للسبب الذي زال: سجلّ كان مفقودًا، خدمة كانت متوقّفة، إعداد لم يملأه أحد.
  • على عملية ما تزال جارية فقط. لا تُعرض إعادة المحاولة على مسارات عملية موقوفة: إحياء أحدها إحياء لعملية أنهاها أحدهم عن قصد.

نقل عملية جارية إلى نسخة جديدة​

لا يمكنك، وذلك مقصود. تنتهي العملية على النسخة التي بدأت بها. ولا سبيل لنقلها إلى تصميم أحدث، لأنّ الوثيقتين قد لا تحملان الخطوات نفسها أصلًا — العملية واقفة على خطوة ربّما غيّرت النسخة الجديدة اسمها أو نقلتها إلى مسار آخر أو حذفتها، وما من قاعدة يمكن للمنصّة أن تكتبها لتخمّن أيّها الصواب.

وما تفعله بدلًا من ذلك: انشر النسخة الجديدة، فتستخدمها كلّ عملية تبدأ من الآن، ودع الجارية تنتهي. وحين يجب فعلًا أن تتبع عملية جارية التصميمَ الجديد، أوقفها واذكر السبب وابدأ واحدة جديدة.