كيف يمكنني التخلص من جافا العمليات الطفل عندما جافا مخارج التطبيق/تعطل ؟

StackOverflow https://stackoverflow.com/questions/261125

سؤال

انا إطلاق عملية طفل في جافا على النحو التالي:

final String[] cmd = {"<childProcessName>"};
Process process = Runtime.getRuntime().exec(cmd);

الآن يعمل في الخلفية.كل خير و بخير

إذا كان البرنامج الآن تعطل (عليه هو لا يزال في ديف :-)) عملية طفل لا يزال يبدو أن تسكع.كيف يمكنني جعله تلقائيا عند الوالد عملية جافا يموت ؟

إذا كان ذلك يساعد ، أنا باستخدام نظام التشغيل Mac OS X 10.5

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

المحلول

كما قلت ، addShutdownHook هو الطريق للذهاب.

ولكن:

  • لا يوجد أي ضمان من أن اغلاق السنانير يتم تنفيذها إذا كان البرنامج ينتهي.شخص ما يمكن أن تقتل عملية جافا و في حالة إغلاق هوك لن ينفذ.(كما قال في هذا لذلك السؤال)

  • بعض المكتبات القياسية الخاصة بهم السنانير التي قد تعمل قبل لك.

  • حذار من المآزق.

وثمة إمكانية أخرى التفاف برنامج java الخاص بك في الخدمة.

نصائح أخرى

وعملت بها نفسي بالفعل. أود أن أضيف ربط الاغلاق، كما يلي:

final String[] cmd = {"<childProcessName>"};
final Process process = Runtime.getRuntime().exec(cmd);
Runnable runnable = new Runnable() {
    public void run() {
        process.destroy();
    }
};
Runtime.getRuntime().addShutdownHook(new Thread(runnable));
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top