Tôi đang làm việc trên linux và tôi nhận ra rằng ứng dụng của tôi đã để lại các quy trình daemon khi tôi đóng nó bằng nút "Stop" trên IDE của Qt creator. Tôi muốn xử lý các trường hợp này để ứng dụng đóng cùng một cách như khi tôi đóng cửa sổ chính. Để viết các trình xử lý, tôi cần biết các tín hiệu nào tương ứng với nó.tín hiệu được gửi bởi qtcreator trên "stop"
Trả lời
Đào vào mã QtCreator, tôi có thể thấy rằng QtCreator sử dụng QProcess trong nội bộ để khởi chạy ứng dụng của bạn. Nút "dừng" màu đỏ được kết nối với ApplicationLauncher::stop()
, kết thúc quá trình của bạn theo một trong hai cách tùy thuộc vào ứng dụng GUI hoặc ứng dụng bảng điều khiển, nhưng trong cả hai trường hợp, kết quả sẽ giống nhau trên Linux.
Đối với ứng dụng GUI, ApplicationLauncher
gọi QProcess::terminate()
, do đó sẽ gửi tín hiệu SIGTERM (trên Linux) tới daemon của bạn. Sau đó nó chờ (với waitForFinished()
) trong 1 giây, và nếu daemon đã không thoát ra sau đó, nó gọi QProcess::kill()
, gửi SIGKILL
.
Đối với ứng dụng bảng điều khiển, ApplicationLauncher
ủy quyền chấm dứt cho lớp tiện ích ConsoleProcess
. Trên Linux, ConsoleProcess::stop()
sẽ hoạt động tương tự như ApplicationLauncher
cho ứng dụng GUI, đây là lần đầu tiên gửi SIGTERM
, sau đó chờ 1 giây và gửi SIGKILL
nếu chưa kết thúc.
Bạn sẽ tìm thấy mã có liên quan từ QtCreator đây:
phản ứng gọn gàng Fred. – UmNyobe
@Fred Vì vậy, các liên kết mã có liên quan áp dụng cho "Chạy" một ứng dụng - tuy nhiên tất nhiên các khối này không liên quan khi "Gỡ lỗi" một ứng dụng. Bất kỳ ý tưởng, nơi để hoạt động dừng/giết tương ứng là để gỡ lỗi? Có lẽ nó chỉ đơn giản là hướng dẫn gdb để thực hiện hành động giết thời gian này bằng cách nào đó? – dtmland
phiên bản ngắn: Bạn có thể không
dài phiên bản:
Bạn có thể thử sử dụng:
http://doc.qt.digia.com/qt/qcoreapplication.html#aboutToQuit
Nhưng điều này sẽ không hoạt động như mong đợi. Nếu một quá trình được chấm dứt bởi lực (đó là những gì dừng trong IDE đang làm, tôi đoán sử dụng TerminateProcess() trên windows http://msdn.microsoft.com/en-gb/library/windows/desktop/ms686714(v=vs.85).aspx) sau đó quá trình này ngay lập tức bị giết ở giữa bất cứ điều gì nó đang thực hiện. Nó không thể xử lý các trường hợp này từ Qt một mình.
- 1. Gửi tín hiệu đến quy trình
- 2. Gửi tín hiệu POSIX từ JVM
- 3. Xử lý tín hiệu trên Windows
- 4. Chức năng Python Scrapy được gọi ngay trước khi tín hiệu spider_closed được gửi đi?
- 5. Gửi tin nhắn đến người dùng qua tín hiệu django
- 6. django tín hiệu post_save gửi formsets inline lỗi thời
- 7. Gửi và bắt tín hiệu đến pthreads trong C
- 8. Gửi tín hiệu midi từ C# đến ableton
- 9. Gửi tín hiệu từ phương thức lớp tĩnh trong Qt
- 10. tín hiệu post_save trên trường m2m
- 11. Gửi tín hiệu đến một quá trình bên trong valgrind?
- 12. Tín hiệu bắt Golang
- 13. "Tín hiệu 15 đã nhận được"
- 14. Trạng thái tín hiệu và không có tín hiệu
- 15. Tín hiệu nào ctrl-x gửi khi được sử dụng trong thiết bị đầu cuối?
- 16. Tín hiệu nhận được chương trình SIGABRT
- 17. Gửi tín hiệu khi cáp nối tiếp USB được rút phích cắm
- 18. Các tín hiệu Process.kill nào có sẵn trên Windows?
- 19. Amazon S3 có gửi tín hiệu vô hiệu đến CloudFront không?
- 20. Điều gì xảy ra nếu trong quá trình xử lý tín hiệu trong UNIX, tín hiệu tương tự sẽ được gửi đến chương trình?
- 21. Sự kiện ConnectNamedPipe không chặn không nhận được tín hiệu
- 22. Tín hiệu Django qua Decorator trên Phương thức Mô hình?
- 23. Ngăn xếp tín hiệu
- 24. Tắt tín hiệu khi khởi tạo LLDB
- 25. Chùm tín hiệu JVM SIGPIPE
- 26. SIGKILL tín hiệu xử lý
- 27. chương trình Twisted và tín hiệu
- 28. Sự kiện jQuery Stop .blur() khi nhấp vào nút "gửi"
- 29. Chủ đề/tín hiệu POSIX: Cách di động để xác định luồng tín hiệu nào được phân phối?
- 30. Giao tiếp giữa các luồng. Làm thế nào để gửi một tín hiệu đến thread khác
Đó sẽ là SIGTERM tôi nghĩ. – sashoalm