سؤال

لديّ عمليتان ، A و B. في مرحلة ما يخلق A B. بعد إنشاء B ، إذا كانت عملية A شجرة قتل ، أريد أن لا يزال B موجودًا.

أنا أستخدم CreateProcess () لإنشاء B ، ولا يمكنني العثور على أي طريقة لجعلها تنشئ العملية دون أن تكون طفلاً. نفس الشيء مع Shellexecuteex () ، لكنني ربما أفتقد بعض العلم.

هل يعرف أحد ما يمكنني استخدامه للقيام بذلك؟

تحرير: لقد نسيت أن أذكر أن كلتا العمليتين تحتاج إلى معرف مقبض أو معرف للآخر

هل كانت مفيدة؟

المحلول

يمكنك تجربة هذه العملية A عملية إنشاء C ، والتي تنشئ العملية B ومن ثم ستتم إنهاء العملية C (تم إنهاءها). في العملية ب ، توجد معلومات فقط حول عملية الوالدين المباشرة (معرف عملية C الذي لا يكون أكثر تشغيلًا) وليس حول العملية A. لذا "إذا قتلت شجرة A" ، فمن المحتمل أن تظل العملية B قيد التشغيل.

على سبيل المثال ، يمكنك بدء تشغيل Explorer (انظر http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx) ثم ابدأ القائد الكلي. من إجمالي القائد ، تبدأ cmd.exe. من cmd.exe تبدأ notepad.exe. ثم اكتب "خروج" في cmd.exe. بعد إنهاء cmd.exe ، يمكنك أن ترى أن Notepad.exe لن يتم عرضه تحت إجمالي Commander (TotalCmd.exe). بعد الاختيار في عملية Explorer "عملية قتل شجرة" لإجمالي القائد (TotalCMD.exe) يمكنك أن ترى أن Notepad.exe يبقى قيد التشغيل.

نصائح أخرى

يمكنك ضبط paramaeter dwcreationflags كـ detached_process في API createProcess.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top