Piszę program wielowątkowy, w którym chcę obsłużyć od użytkownika polecenie Ctrl-C w celu zakończenia wykonywania. O ile wiem, nie ma gwarancji, że główny wątek, który jest w stanie anulować każdy działający wątek, złapie sygnał. Czy w związku z tym konieczne jest posiadanie innego programu obsługi sygnału do kodu wątku roboczego, aby każdy mógł go złapać, jeśli nadejdzie, lub czy istnieje inny sposób, aby to zrobić z obsługą sygnału tylko w kodzie głównego wątku?przechwytywanie SIGINT w programie wielowątkowym
7
A
Odpowiedz
8
Możesz zablokować sygnały z wątku wywołującego za pomocą pthread_sigmask().
i jako blokowane sygnały są dziedziczone do nowo utworzonych wątków, możesz zablokować SIGINT w głównym wątku, a następnie uruchamianie innych wątków, a następnie odblokować go w głównym wątku, jeśli jest to korzystne.
Powiązane problemy
- 1. widelec w wielowątkowym programie
- 2. Dziwny wyjątek 0x0eedfade w wielowątkowym programie Delphi
- 3. Jak rozwiązać "cassandra.cluster.NoHostAvailable" w wielowątkowym programie Python
- 4. Program OpenGL SDL/C++, jak zatrzymać przechwytywanie SDL SIGINT
- 5. Jak włączyć funkcję odwrotnego debugowania w programie wielowątkowym?
- 6. czas wykonywania w środowisku wielowątkowym
- 7. Używanie Log4Net w środowisku wielowątkowym
- 8. Wysyłanie SIGINT do podprocesowania pythona
- 9. W wielowątkowym programie Java, czy każdy wątek ma własną kopię System.out?
- 10. SIGINT, aby anulować czytanie w skrypcie Bash?
- 11. Co ze stanem wyścigu w czytaniu wielowątkowym?
- 12. Jak działa HttpContext.Current w środowisku wielowątkowym?
- 13. Używanie unixODBC w wielowątkowym, współbieżnym ustawieniu
- 14. Jak działa malloc w środowisku wielowątkowym?
- 15. Najlepsza praktyka używania HttpClient w środowisku wielowątkowym
- 16. Przechwytywanie czas w milisekundach
- 17. Przechwytywanie wiadomości w pisku
- 18. Przechwytywanie pakietów w RDMA?
- 19. Rejestrowanie produkcji w programie Flex
- 20. Cienki nie reaguje na SIGINT lub SIGTERM
- 21. Propagowanie sygnału (SIGINT) do C++ 11 wątków
- 22. Wyczyść Pythona SIGINT domyślne obsługi sygnału
- 23. Catching/blocking SIGINT podczas wywołania systemowego
- 24. Jak poprawnie obsłużyć SIGINT za pomocą Express.js?
- 25. Java - Przechwytywanie System.out.println lub Przechwytywanie PrintStream
- 26. 404 Przechwytywanie
- 27. Przechwytywanie ekranu
- 28. Stan wyścigu wyścigu/tętna na serwerze wielowątkowym
- 29. Wracając do słownika w C# w środowisku wielowątkowym
- 30. Wysyłanie SIGINT z klawiatury na wyprowadzone polecenia w bashu
ale w ten sposób nie będzie sygnału sigint do stracenia, jeśli wątek dziecko zdarzy się go złapać i po prostu go ignoruje? – nikos
@nikos: Tak, ale nie widzę związku z tym, co pisałem; Jeśli nić blokuje sygnał, nie może z definicji go złapać. – janneb
@nikos: Sygnał nigdy nie jest dostarczany do wątku, który go zablokował (np. Za pomocą 'pthread_sigmask()') - różni się to od wątku przechwytywania i ignorowania go. Jeśli wszystkie wątki są zablokowane, główny wątek ma blokadę "SIGINT", a następnie zostanie dostarczony do głównego wątku. – caf