أوقفت دفعة الصور لكنها واصلت إنفاق الرصيد
ألغيت دفعة توليد تعمل في الخلفية على Windows، فبقيت عملياتها الفرعية حية تنتج صور PNG وتستهلك الرصيد.

ظلت صور PNG جديدة تظهر بعد أن أوقفت الدفعة التي تعمل في الخلفية.
وظل رصيدي يتناقص أيضا.
كان أمر الإيقاف قد أفاد بأن المهمة ألغيت، فبدت الدفعة ميتة من الواجهة التي أطلقتها منها. لكن هذه النتيجة على Windows لم تكن تعني أن شجرة العمليات كلها توقفت.
كانت عمليتا bash.exe لا تزالان تشغلان دفعة التوليد. إحداهما تخص تشغيلا لـGPT كنت قد «أوقفته» قبل نصف ساعة. والأخرى تخص تشغيلا لـnano. وتحتهما كانت سلسلة التوليد لا تزال حية:
sh.exe → node.exe → hf.exe
توقف الغلاف، أما أبناؤه فلم يتوقفوا.
إلغاء العملية الأم لم يكن كافيا
كانت الدفعة تعمل في الخلفية عبر Git Bash على Windows. وفي داخلها حلقة تواصل قراءة المهام وإطلاق أوامر التوليد في Higgsfield.
أنهى إيقاف المهمة الخلفية الغلاف المرتبط بها. لكن الإنهاء لم يمتد عبر شجرة العمليات الفرعية. واصلت عملية bash.exe الفرعية عملها يتيمة، وظلت حلقة while read الخاصة بها تتقدم في الدفعة.
لهذا روت الواجهة ومجلد النتائج قصتين مختلفتين.
قالت الواجهة إن المهمة توقفت. وظل المجلد يتلقى الصور لأن عملية التوليد الفعلية لا تزال لها فروع حية. وظل Higgsfield يتلقى الطلبات، فاستمر إنفاق الرصيد.
لم يكن اسم العملية وحده كافيا لتحديد الشجرة الصحيحة. فقد تكون على Windows عدة عمليات لـshell أو Node أو سطر الأوامر مفتوحة في الوقت نفسه. وإنهاء كل عملية تحمل اسم ملف تنفيذي شائع سيكون عملا غير دقيق.
كان المعرف المفيد هو سطر الأوامر.
فحصت العمليات الحية بحسب سطر الأوامر
استخدم الفحص الذي تحققت منه Win32_Process:
Get-CimInstance Win32_Process |
Where-Object { $_.CommandLine -match 'generate-faces|higgsfield' }
كشف هذا العمليات التي تحتوي أسطر أوامرها على مصطلحات الدفعة أو التوليد في Higgsfield.
عثر هذا الفحص على عمليتي bash.exe الباقيتين وعلى السلسلة الفرعية أيضا. ولم يعتمد على تذكر واجهة المهام الخلفية لها، بل سأل Windows عما لا يزال يعمل.
راجعت النتائج المطابقة قبل إيقاف أي شيء. فسطر الأوامر ربط كل PID بعمل التوليد المدفوع. وهذا أكثر أمانا وفائدة من البحث عن bash.exe وحده، لأن bash.exe لا يخبرني إلا بالملف التنفيذي الذي يعمل، ولا يخبرني بما يفعله.
بعد تحديد أرقام PID الصحيحة، استخدمت Stop-Process -Force على كل عملية في شجرة التوليد.
لم يكن الجزء المهم هو خيار الإجبار في حد ذاته، بل اختيار أرقام PID الذي سبقه. فكل هدف كان مرتبطا بالدفعة عبر سطر أوامره.
كان الفحص الثاني بأهمية الإيقاف نفسه
لم أعامل أمر الإيقاف دليلا على انتهاء العمل. فهذا الافتراض كان قد خذلني مرة بالفعل.
بعد إيقاف أرقام PID المطابقة، فحصت قائمة العمليات من جديد باستخدام ps aux | grep، باحثا عن مصطلحات الدفعة وHiggsfield نفسها. ولم أعتبر الدفعة متوقفة إلا عندما لم تبق أي عملية ذات صلة.
يسد هذا الفحص الأخير الفجوة بين إصدار أمر الإنهاء والتأكد من أثره.
في دفعة محلية عادية، قد تكون عملية shell يتيمة مجرد إزعاج. أما في دفعة توليد مدفوعة، فهي نفقة جارية. فكل دورة قد تنشئ مهمة أخرى رغم أنني أظن أنني ألغيت التشغيل.
يقدم مجلد النتائج إنذارا آخر. فإذا ظلت ملفات جديدة تظهر، فالدفعة لم تتوقف، مهما قال الغلاف. ويقدم الرصيد الإنذار نفسه من جهة الفوترة.
لكن لا ينبغي أن يكون أي منهما وسيلة الضبط الأساسية. فعندما تظهر صورة أخرى أو يتغير الرصيد، قد يكون طلب آخر قد أرسل بالفعل. شجرة العمليات هي الفحص المباشر.
غيرت ما تسجله الدفعة
يجب أن تسجل سكربتات الدفعات المدفوعة رقم PID الخاص بها.
يمنحني ذلك نقطة بداية دقيقة عندما أحتاج إلى إيقاف تشغيل ما. أستطيع تحديد العملية المسجلة، وفحص فروعها، والتأكد من أسطر الأوامر التي تنتمي إلى الدفعة.
لا يلغي رقم PID الحاجة إلى التحقق من العمليات الفرعية على Windows، لكنه يسرع التحقق ويقلل الالتباس عندما تكون عدة نوافذ shell نشطة.
صار إجراء الإيقاف الكامل جزءا من تشغيل الدفعة، لا تنظيفا طارئا بعدها:
أبدأ الدفعة وأسجل رقم PID الخاص بها. عند الإلغاء، أوقف المهمة المقصودة. أفحص Win32_Process بحثا عن أسطر الأوامر المطابقة. أوقف كل عملية مؤكدة في شجرة التوليد. ثم أفحص من جديد إلى أن لا تبقى أي عملية ذات صلة.
عندها فقط تكون الدفعة قد توقفت.
القاعدة التي أعمل بها الآن
رسالة الإلغاء الناجح ليست دليلا على انتهاء دفعة مدفوعة على Windows.
الدليل هو بحث فارغ في العمليات عن تلك الدفعة وعن أمر توليدها. فإذا بقيت bash.exe أو sh.exe أو node.exe أو hf.exe مرتبطة بسطر الأوامر المطابق، فقد يستمر العمل.
إذا كنت تشغل دفعات ذكاء اصطناعي مدفوعة على Windows، فأضف تسجيل رقم PID اليوم. وفي المرة القادمة التي تلغي فيها واحدة، افحص Win32_Process بحسب سطر الأوامر وتحقق من اختفاء الشجرة كلها قبل أن تثق بالإيقاف.
كل حل في هذا المقال سبقه خطأ دفعت ثمنه. الأفضل أن يحدث في فيلمي لا في علامتك التجارية.


