2013-01-03 20 views
5

पर qtcreator द्वारा भेजे गए सिग्नल मैं लिनक्स पर काम कर रहा हूं और मुझे एहसास हुआ कि जब मैं इसे क्यूटी निर्माता आईडीई पर "स्टॉप" बटन से बंद करता हूं तो मेरा एप्लिकेशन डिमन प्रक्रियाओं के पीछे छोड़ रहा था। मैं इन मामलों को संभालना चाहता हूं ताकि जब मैं मुख्य विंडो बंद करूँ तो एप्लिकेशन उसी तरह बंद हो जाए। हैंडलर लिखने के लिए, मुझे यह जानने की ज़रूरत है कि यह कौन से संकेतों से मेल खाता है।"रोकें"

+0

कि SIGTERM होगा मुझे लगता है। – sashoalm

उत्तर

7

QtCreator के कोड में खोदने पर, मैं देख सकता हूं कि QtCreator आपके ऐप को लॉन्च करने के लिए आंतरिक रूप से एक QProcess का उपयोग करता है। लाल "स्टॉप" बटन ApplicationLauncher::stop() से जुड़ा हुआ है, जो आपकी प्रक्रिया को दो तरीकों से समाप्त करता है, भले ही यह एक जीयूआई ऐप या कंसोल ऐप है, लेकिन दोनों मामलों में, परिणाम लिनक्स पर समान होता है।

एक जीयूआई ऐप के लिए, ApplicationLauncherQProcess::terminate() पर कॉल करता है, जो बदले में आपके डिमन को सिगरेट (लिनक्स पर) सिग्नल भेजता है। इसके बाद यह 1 सेकंड के लिए (waitForFinished() के साथ) प्रतीक्षा करता है, और यदि डिमन ने तब तक नहीं छोड़ा है, तो यह SIGKILL भेजकर QProcess::kill() पर कॉल करता है।

एक कंसोल ऐप के लिए, ApplicationLauncherConsoleProcess उपयोगिता वर्ग को समाप्त करने का प्रतिनिधि करता है। लिनक्स पर, ConsoleProcess::stop() एक जीयूआई ऐप के लिए ApplicationLauncher के समान कार्य करेगा, जो पहले SIGTERM भेज रहा है, फिर 1 सेकंड की प्रतीक्षा कर रहा है, और SIGKILL भेज रहा है, अगर इसे अभी तक समाप्त नहीं किया गया है।

आप QtCreator यहां से प्रासंगिक कोड मिलेगा:

+0

साफ प्रतिक्रिया फ्रेड। – UmNyobe

+1

@Fred तो प्रासंगिक कोड लिंक एप्लिकेशन को "चलाना" पर लागू होते हैं - हालांकि निश्चित रूप से ये ब्लॉक अप्रासंगिक होते हैं जब कोई एप्लिकेशन "डिबगिंग" होता है। कोई विचार जहां संबंधित स्टॉप/मार ऑपरेशन डीबगिंग के लिए हैं? शायद यह किसी भी तरह से इस हत्या टाइमआउट कार्रवाई करने के लिए gdb निर्देशित करता है? – dtmland

0

लघु संस्करण: आप

लांग संस्करण नहीं कर सकते हैं:

आप का उपयोग कर की कोशिश कर सकते:

http://doc.qt.digia.com/qt/qcoreapplication.html#aboutToQuit

लेकिन इस अपेक्षा के अनुरूप काम नहीं होगा। यदि कोई प्रक्रिया बल द्वारा समाप्त की जाती है (आईडीईई में स्टॉप क्या होता है, तो मुझे लगता है कि विंडोज http://msdn.microsoft.com/en-gb/library/windows/desktop/ms686714(v=vs.85).aspx पर टर्मिनेटप्रोसेस() का उपयोग करके मुझे लगता है कि प्रक्रिया को जो कुछ भी निष्पादित किया जा रहा है उसके बीच तुरंत मार दिया जाता है। अकेले क्यूटी से इन मामलों को संभालना संभव नहीं है।

संबंधित मुद्दे