Штудирую ncurses доки, там заюзаны сигналы, идти распыляться и штудировать все подряд не хочется, а вопросы появились. В целом сигналы понимаю, а вот мелочи - не очень. Такой код:
static void finish(int sig);
int
main(int argc, char *argv[])
{
...
(void) signal(SIGINT, finish); /* arrange interrupts to terminate */
...
finish(0); /* we are done */
}
static void finish(int sig)
{
endwin();
exit(0);
}
-
Вызов endwin() в хендлере. Равзе это не говнокод? Как бы хз в каком состоянии находилась ncurses после последнего кванта проц времени, а тут дергается ее deinit.
-
Второй вопрос важнее - если закомментить exit() в хендлере, то что происходит с процессом после возврата из обработчика? Опыт показывает, что процесс после этого нормально не работает, но и не завршается совсем. Какая там магия? Что, если я хочу выполнить некое действие в хендлере и продолжить выполнение основного кода (установить некий exit_flag), как я должен это сделать (там какую-то функцию надо дернуть, да? Какую?).
Зы: начинаешь гуглить про сигналы, там тебе рассказывают про $ kill.