У меня случается очень странная ситуация. Есть мультитредовая программа, работающая под LinuxThreads (NPTL не обсуждается). В ней есть обработчик Ctrl-C (SIGINT). Из этого обработчика зовется сначала pthread_cancel() для некоторых тредов, а затем exit(). Main-тред что-то печатает в цикле, и в это время пользователь нажимает Ctrl-C. В моем случае SIGINT всегда обрабатывается в main треде - это видно по PID-у. Вопреки всем ожиданиям, после вызова exit() main продолжает работу, которая была прервана по Ctrl-C! Все остальные потоки, кроме менеджера, умирают. То есть лог выглядит примерно так:
[pid 13801] Starting...
Running the runner 1
The runner 1 is working
The runner 1 is working
[pid 13801] The main thread is working
The runner 1 is working
The runner 1 is working
[pid 13801] The main thread is working
[pid 13801] SIGINT caught
[pid 13801] Killing threads... done
[pid 13801] calling exit...
[pid 13801] The main thread is working
[pid 13801] The main thread is working
[pid 13801] The main thread is working
[pid 13801] The main thread is working
[pid 13801] The main thread is working
Как же такое может быть?? У меня, честно говоря, ум за разум заходит... :(
![](/photos/9916:-1997412678.jpg)
![](/photos/9916:-1997412678.jpg)
Ответ на:
комментарий
от Spectr
![](/img/p.gif)
![](/img/p.gif)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
Похожие темы
- Форум bash запускает отдельный процесс для под-оболочек в пайпах (2020)
- Форум Блокировка файла (fcntl) (2009)
- Форум Обработка сигналов в программе на C (2023)
- Форум какая ответственность за невыполнение договора? (2014)
- Форум Exit и Outlook2003 (2010)
- Форум Configure exit 77 (2010)
- Форум bash и exit (2009)
- Форум bash exit & jobs (2003)
- Форум Невыход по exit() (2005)
- Форум как остановить configure в случае невыполнения условия? (2011)