Sto lavorando su linux e mi sono reso conto che la mia applicazione stava abbandonando i processi demone quando la chiudo con il pulsante "Stop" su ID utente creatore Qt. Voglio gestire questi casi in modo che l'applicazione si chiuda allo stesso modo di quando chiudo la finestra principale. Per scrivere i gestori, ho bisogno di sapere a quali segnali corrisponde.segnali inviati da qtcreator su "stop"
risposta
Scavando nel codice di QtCreator, posso vedere che QtCreator utilizza internamente un processo QProcess per avviare l'app. Il pulsante rosso "stop" è collegato a ApplicationLauncher::stop()
, che termina il processo in due modi, a seconda che si tratti di un'app GUI o di un'app console, ma in entrambi i casi, il risultato sarà lo stesso su Linux.
Per un'applicazione GUI, ApplicationLauncher
chiamate QProcess::terminate()
, che a sua volta invia un segnale SIGTERM (su Linux) al demone. Quindi attende (con waitForFinished()
) per 1 secondo e se il daemon non ha chiuso, chiama QProcess::kill()
, inviando SIGKILL
.
Per un'app console, ApplicationLauncher
, la terminazione alla classe di utilità ConsoleProcess
. Su Linux, ConsoleProcess::stop()
si comporterà come ApplicationLauncher
per un'app GUI, che prima invia SIGTERM
, quindi attende 1 secondo e invia SIGKILL
se non è ancora terminato.
se si trova il relativo codice da QtCreator qui:
risposta chiara Fred. – UmNyobe
@Fred Quindi i collegamenti di codice rilevanti si applicano a "Esecuzione" di un'applicazione - tuttavia, naturalmente, questi blocchi sono irrilevanti quando si esegue il debug di un'applicazione. Qualche idea su dove eseguire le operazioni stop/kill corrispondenti per il debug? Forse semplicemente ordina a gdb di eseguire in qualche modo questa azione di timeout dell'uccisione? – dtmland
Versione corta: Non è possibile
Versione lunga:
Si potrebbe provare a utilizzare:
http://doc.qt.digia.com/qt/qcoreapplication.html#aboutToQuit
Ma questo non funzionerà come previsto. Se un processo viene terminato con la forza (che è ciò che sta facendo l'arresto nell'IDE, suppongo che utilizzi TerminateProcess() su Windows http://msdn.microsoft.com/en-gb/library/windows/desktop/ms686714(v=vs.85).aspx), il processo viene immediatamente ucciso nel mezzo di qualunque cosa stia eseguendo. Non è possibile gestire questi casi da Qt da solo.
- 1. stop $ .ajax su beforeSend
- 2. ActivityManager.killBackgroundProcesses diverso da "Force stop"
- 3. Reagire su Visual Studio Stop
- 4. Segnali e segnali POSIX
- 5. Start/Stop DispatcherTimer da un thread diverso
- 6. Disabilitare i segnali all'inizializzazione LLDB
- 7. Toolkit non emette segnali acustici su ubuntu
- 8. Quali segnali Process.kill sono disponibili su Windows?
- 9. WPF Stop Storyboard su visibilità modificata
- 10. Come compilare su più core usando mingw all'interno di QTCreator
- 11. QtCreator: Nessun kit valido trovato
- 12. Dove vengono archiviati i dati sui kit da QtCreator?
- 13. Come eseguire i test delle unità qtestlib da QtCreator
- 14. Come ottenere più input da QInputDialog in QtCreator
- 15. Uso di cin in QtCreator
- 16. QtCreator su linux: 32 bit contro 64 bit
- 17. Come impostare le finali crlf in QtCreator su linux
- 18. Stop Spinner.js
- 19. Stop setInterval
- 20. QtCreator importando i progetti makefile
- 21. cronjob non-stop
- 22. maniglia chunked dati inviati da Play Scala con AngularJs
- 23. Leggi file inviati con scintilla invio da parte del conducente
- 24. Stop Pulsate jQuery Effect
- 25. Segnali di cattura Golang
- 26. Come generare un'eccezione quando vengono inviati parametri non inviati?
- 27. C# stop e continuare
- 28. Stop a thread Python
- 29. Stop Netbeans Beeping
- 30. Python rimuove le parole di stop da pandas dataframe
Questo sarebbe SIGTERM credo. – sashoalm