LINUX.ORG.RU

продолжить работу после обработки signal


0

0
код примерно таков:

void Signal_Handler(int sig) {
	printf("Yes, I am hear you\n");
}

int main( int argc, char *argv[] ) {

	signal(SIGINT, Signal_Handler);

    if ( fork() == 0) {
           sleep(2);
           kill(getppid(), SIGINT);
           exit(0);
    }

    sleep(10);
    exit(0);
}

В итоге, через 2 секунды main завершает свою работу.
Никогда не задумывался над этим: можно ли продолжить работу далее ?

А если сигнал только для ребенка установить?
swizard
()
Все нормально, все продолжается, man 3 sleep (sleep() makes the current process sleep until seconds seconds have elapsed _or_a_signal_arrives which is not ignored).

Die-Hard ★★★★★
()
Судя по постам в предыдущей ветке, надо,
наверное, подробнее :-)

Вот, спробуй:

void Signal_Handler(int sig) {
   printf("Yes, I hear you\n");
}

int main( int argc, char *argv[] ) {

   signal(SIGINT, Signal_Handler);

    if ( fork() == 0) {
           sleep(2);
           kill(getppid(), SIGINT);
           exit(0);
    }

    sleep(10);
/********************************/
    printf("!!!!AAAAAAAAAA!!!!!!!!\n");
/********************************/
    exit(0);
}
Die-Hard ★★★★★
()
Ответ на: комментарий от Die-Hard
да, я уже тоже прочитал man и сделал аналогичный тест )
спасибо.
nial
() автор топика
Ответ на: комментарий от Die-Hard
Ну вроде бы не все ф-ции можно использовать в обработчике сигнала. Есть в POSIX специальный список ф-ций, которые можно. Кажется, printf() нельзя, вместо этого где-то видел, что использовали write().
php-coder ★★★★★
()
Ответ на: комментарий от Die-Hard
>> А разве в обработчике сигнала можно использовать printf()?

> А кто мешает?

Хороший тон - это просто взводить флаг в обработчике сигнала. Или писать 1 байт в pipe :)

tailgunner ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.