Pracuję nad linuxem i zdałem sobie sprawę, że moja aplikacja zostawiła procesy demona, kiedy zamykam go za pomocą przycisku "Stop" na IDE kreatora Qt. Chcę obsłużyć te przypadki, aby aplikacja zamknęła się tak samo, jak po zamknięciu głównego okna. Aby napisać programy obsługi, muszę wiedzieć, które sygnały odpowiadają.sygnały wysyłane przez qtcreator na "stop"
Odpowiedz
Pogłębianie kodu QtCreator, widzę, że QtCreator używa wewnętrznie QProcess do uruchomienia aplikacji. Czerwony przycisk "stop" jest połączony z ApplicationLauncher::stop()
, który kończy proces na jeden z dwóch sposobów w zależności od tego, czy jest to aplikacja GUI, czy aplikacja konsolowa, ale w obu przypadkach wynik kończy się na Linuxie.
Dla aplikacji GUI, ApplicationLauncher
dzwoni QProcess::terminate()
, która z kolei wysyła sygnał SIGTERM (na Linux) do twojego demona. Następnie czeka (z waitForFinished()
) przez 1 sekundę, a jeśli demon nie zakończył pracy do tego czasu, wywołuje QProcess::kill()
, wysyłając SIGKILL
.
W przypadku aplikacji konsolowej, ApplicationLauncher
deleguje zakończenie do klasy narzędzia ConsoleProcess
. W systemie Linux numer ConsoleProcess::stop()
będzie podobny do ApplicationLauncher
dla aplikacji GUI, która po raz pierwszy wysyła SIGTERM
, a następnie czeka na 1 sekundę i wysyła SIGKILL
, jeśli jeszcze nie została zakończona.
Znajdziesz odpowiedni kod z Qt Creator tutaj:
schludna odpowiedź Fred. – UmNyobe
@Fred Więc odpowiednie linki do kodu mają zastosowanie do "Uruchamiania" aplikacji - jednak oczywiście te bloki są nieistotne podczas "Debugowania" aplikacji. Każdy pomysł, gdzie do odpowiednich operacji stop/kill są do debugowania? Być może po prostu instruuje on gdb, by jakoś wykonał tę akcję z killem? – dtmland
Krótka wersja: Nie można
Długa wersja:
Można spróbować użyć:
http://doc.qt.digia.com/qt/qcoreapplication.html#aboutToQuit
Ale to nie będzie działać zgodnie z oczekiwaniami. Jeśli proces zostanie przerwany siłą (co robi stop w IDE, zgaduję, używając TerminateProcess() w systemie Windows http://msdn.microsoft.com/en-gb/library/windows/desktop/ms686714(v=vs.85).aspx), wtedy proces jest natychmiastowo zabijany w środku tego, co wykonuje. Nie można obsłużyć tych przypadków z samego Qt.
- 1. Stop na pierwszym błędzie
- 2. Zdarzenia wysyłane przez serwer i limity przeglądarki
- 3. Jakie nagłówki są automatycznie wysyłane przez wget?
- 4. Sygnały złapania Golanga
- 5. Stop Spinner.js
- 6. QtCreator importowanie projektów makefile
- 7. Czy można zignorować wszystkie sygnały?
- 8. Sygnały Django w selerze
- 9. Usuwanie obiektów wysyła sygnały, własności obiektów w sygnały, Qt
- 10. kaskady i sygnały/gniazda
- 11. Czy korzystasz z Rejestrujących wysyłane przez serwer HTML5 (SSE)?
- 12. Jak logować wiadomości SOAP wysyłane przez stos Metro
- 13. Jak śledzić żądania SOAP, które są wysyłane przez webServiceTemplate
- 14. Gdzie Eclipse drukuje wiadomości wysyłane przez procesor adnotacji?
- 15. Sygnały a sygnały2
- 16. Przeciążone sygnały pyside (QComboBox)
- 17. sygnały Django nie działa
- 18. Stop Pulsate Efekt jQuery
- 19. QtCreator brak konfiguracji debuggera (Windows)
- 20. Argumenty QtCreator i wiersza poleceń
- 21. Gdzie QtCreator zapisze swoje ustawienia?
- 22. Dane wysyłane zmienione po otrzymaniu
- 23. Stop UIPopover automatycznie odrzucił
- 24. Jak odwołać sygnały poza models.py
- 25. Jak ustawić końcówki crlf w QtCreator na Linuksie
- 26. sygnały lub wyzwalacze w SQLAlchemy
- 27. Sygnały w Linq do Sql?
- 28. sygnały django, jak używać "instancji"
- 29. Xcode Wyjdź kody i sygnały
- 30. Sygnały Qt (QueuedConnection i DirectConnection)
To byłoby SIGTERM myślę. – sashoalm